请选择 进入手机版 | 继续访问电脑版

可乐信息网社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4702|回复: 3

58同城android客户端手机号码解密方法

[复制链接]
发表于 2012-3-5 01:09 | 显示全部楼层 |阅读模式
       由于58同城在页面上抓取二手房信息的时候,用户的联系电话是图片的,本人水平关系无法进行很好的识别,所以转为抓取其android客户端比较容易,之前都是好好的,最近发现其升级到1.3.0.0后手机号码进行了加密,所以直接反编译其android客户端,查到其用的是des加密,而且加密的key很容易就拿到,下面贴出解密方法。(des加解密比较简单下面贴出来)
public class Decode458 {
static byte[] key = null; //这个key如果有需要请反编译58客户端获取这里不便贴出
public static void main(String[] args) throws Exception {
  System.out.println(new String(Decode458.decode(Decode458.convertHexString("002E674657AE8239982087DCB2E6A99B"))));
  System.out.println(Decode458.toHexString(Decode458.encode("13219863008".getBytes())));
}

public static byte[] decode(byte[] paramArrayOfByte) {
  try {
   SecureRandom localSecureRandom = new SecureRandom();
   DESKeySpec localDESKeySpec = new DESKeySpec(key);
   SecretKey localSecretKey = SecretKeyFactory.getInstance("DES")
     .generateSecret(localDESKeySpec);
   Cipher localCipher = Cipher.getInstance("DES");
   localCipher.init(2, localSecretKey, localSecureRandom);
   return localCipher.doFinal(paramArrayOfByte);
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
}

public static byte[] encode(byte[] paramArrayOfByte) {
  try {
   SecureRandom localSecureRandom = new SecureRandom();
   DESKeySpec localDESKeySpec = new DESKeySpec(key);
   SecretKey localSecretKey = SecretKeyFactory.getInstance("DES")
     .generateSecret(localDESKeySpec);
   Cipher localCipher = Cipher.getInstance("DES");
   localCipher.init(1, localSecretKey, localSecureRandom);
   return localCipher.doFinal(paramArrayOfByte);
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
}

public static byte[] convertHexString(String text) {
  byte digest[] = new byte[text.length() / 2];
  for (int i = 0; i < digest.length; i++) {
   String byteString = text.substring(2 * i, 2 * i + 2);
   int byteValue = Integer.parseInt(byteString, 16);
   digest = (byte) byteValue;
  }
  return digest;
}

public static String toHexString(byte b[]) {
  StringBuffer hexString = new StringBuffer();
  for (int i = 0; i < b.length; i++) {
   String plainText = Integer.toHexString(0xff & b);
   if (plainText.length() < 2)
    plainText = "0" + plainText;
   hexString.append(plainText);
  }
  return hexString.toString();
}
}
很久没写博,上来溜溜,我是firstep



贴子网址:http://hi.baidu.com/alvin4u/blog/item/d2c5ad1b2c7d8938dd5401a5.html#comment
 楼主| 发表于 2012-3-5 01:12 | 显示全部楼层
/*des java

complied ok with eclipse

先建立一个DesEncrypt 类,然后把下面的代码复制上去,编译即可

*/
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
*
* 使用DES加密与解密,可对byte[],String类型进行加密与解密
* 密文可使用String,byte[]存储.
*
* 方法:
* void getKey(String strKey)从strKey的字条生成一个Key
*
* String getEncString(String strMing)对strMing进行加密,返回String密文
* String getDesString(String strMi)对strMin进行解密,返回String明文
*
*byte[] getEncCode(byte[] byteS)byte[]型的加密
*byte[] getDesCode(byte[] byteD)byte[]型的解密
*/

public class DesEncrypt
{
Key key;

/**
* 根据参数生成KEY
* @param strKey
*/
public void getKey(String strKey)
{
try{
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator=null;
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 加密String明文输入,String密文输出
* @param strMing
* @return
*/
public String getEncString(String strMing)
{
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = "";
BASE64Encoder base64en = new BASE64Encoder();
try
{
byteMing = strMing.getBytes("UTF8");
byteMi = this.getEncCode(byteMing);
strMi = base64en.encode(byteMi);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
base64en = null;
byteMing = null;
byteMi = null;
}
return strMi;
}
/**
* 解密 以String密文输入,String明文输出
* @param strMi
* @return
*/
public String getDesString(String strMi)
{
BASE64Decoder base64De = new BASE64Decoder();
byte[] byteMing = null;
byte[] byteMi = null;
String strMing = "";
try
{
byteMi = base64De.decodeBuffer(strMi);
byteMing = this.getDesCode(byteMi);
strMing = new String(byteMing, "UTF8");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
base64De = null;
byteMing = null;
byteMi = null;
}
return strMing;
}
/**
* 加密以byte[]明文输入,byte[]密文输出
* @param byteS
* @return
*/
private byte[] getEncCode(byte[] byteS)
{
byte[] byteFina = null;
Cipher cipher;
try
{
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byteFina = cipher.doFinal(byteS);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
cipher = null;
}
return byteFina;
}
/**
* 解密以byte[]密文输入,以byte[]明文输出
* @param byteD
* @return
*/
private byte[] getDesCode(byte[] byteD)
{
Cipher cipher;
byte[] byteFina=null;
try{
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byteFina = cipher.doFinal(byteD);
}catch(Exception e){
e.printStackTrace();
}finally{
cipher=null;
}
return byteFina;

}

public static void main(String[] args){

System.out.println("des demo");
DesEncrypt des=new DesEncrypt();//实例化一个对像
des.getKey("MYKEY11");//生成密匙
System.out.println("key=MYKEY11");
String strEnc = des.getEncString("CHINA");//加密字符串,返回String的密文
System.out.println("密文="+strEnc);

String strDes = des.getDesString(strEnc);//把String 类型的密文解密
System.out.println("明文="+strDes);

}

}

/*

运行结果:

des demo
key=MYKEY11
密文=n2r7F/mmYiY=
明文=CHINA

*/
本文来自:http://crazycoder.cn/Java/Article21615.html
发表于 2013-1-22 21:13 | 显示全部楼层
辛苦辛苦,谢谢了~~













典藏中国——釉下五彩瓷原产地
发表于 2013-1-27 19:32 | 显示全部楼层
好帖要顶,楼主的头像还是不错滴
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|可乐信息网社区 ( 新ICP备10003818号 )

GMT+8, 2024-3-29 20:02 , Processed in 0.064455 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表