我想写一个程序实现多个QQ的自动登录,在QQ密码加密的时候遇到了问题。从网上查的QQ密码先是用MD5加密,然后用base64加密。于是就写了以下代码:
//ToMd5.java
package com.sxy.util;
import java.security.MessageDigest;
public class ToMd5{
public static String getMD5Code(String str) {
String md5Str="";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] k = md.digest();
md5Str=new String(k); 
} catch (Exception e) {
e.printStackTrace();
}
return md5Str;
}
}
第二个文件:
//Base64.java
package com.sxy.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Base64 { 
public static String getBASE64(String s) { 
if (s == null) return null; 
return (new BASE64Encoder()).encode( s.getBytes() ); 

public static String getFromBASE64(String s) { 
if (s == null) return null; 
BASE64Decoder decoder = new BASE64Decoder(); 
try { 
byte[] b = decoder.decodeBuffer(s); 
return new String(b); 
} catch (Exception e) { 
return null; 

}
}
最后一个:
import com.sxy.util.ToMd5;
import com.sxy.util.Base64;
public class Mima{
public static void main(String args[]){
ToMd5 m=new ToMd5();
Base64 b=new Base64();
String buff="123456";
buff=m.getMD5Code(buff);
buff=b.getBASE64(buff);
System.out.println (buff);
//应该输出:4QrcOUm6Wau+VuBX8g+IPg==
//实际输出:Pz9JulmrvlbgVz8/
}
}
输出就是不正确,连位数也不对,请问这是为什么呢? 
我还试了一下,把4QrcOUm6Wau+VuBX8g+IPg==,进行base64解码之后,看起来和我得到的MD5字符串是一样的,均为:“??I篩V郬??”可是调用equals()方法进行比较的时候就返回false了。真不明白是怎么回事。

解决方案 »

  1.   

    base64不是加码算法,只是编码
    QQ的加密好像很复杂
      

  2.   

    怎么打印出来一个数呢?我又不知道数字对应的MD5。
    至于加密算法应该就是这样的,我用这歌方法登录过的,网上也有软件能够生成QQ自动登录的命令行,“4QrcOUm6Wau+VuBX8g+IPg==”就是我用这样的软件算出来的,而且能够正常登录qq。