我想写一个程序实现多个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了。真不明白是怎么回事。
//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了。真不明白是怎么回事。
QQ的加密好像很复杂
至于加密算法应该就是这样的,我用这歌方法登录过的,网上也有软件能够生成QQ自动登录的命令行,“4QrcOUm6Wau+VuBX8g+IPg==”就是我用这样的软件算出来的,而且能够正常登录qq。