QQ空间在5月31日抛弃了旧时的加密方式,使用了新的加密方式,下面就是java版的 2012QQ空间加密核心代码.
C# 版本地址: [url=http://blog.csdn.net/xiaolajiao958/article/details/7621750]http://blog.csdn.net/xiaolajiao958/article/details/7621750[/url]
代码需要优化的,大家自己优化.呵呵.
欢迎提供更好的建议.
C# 版本地址: [url=http://blog.csdn.net/xiaolajiao958/article/details/7621750]http://blog.csdn.net/xiaolajiao958/article/details/7621750[/url]
代码需要优化的,大家自己优化.呵呵.
欢迎提供更好的建议.
public static final String HEXSTRING = "0123456789ABCDEF";
public static String md5(String originalText) throws Exception {
byte buf[] = originalText.getBytes("ISO-8859-1");
StringBuffer hexString = new StringBuffer();
String result = "";
String digit = "";
try {
MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(buf);
byte[] digest = algorithm.digest();
for (int i = 0; i < digest.length; i++) {
digit = Integer.toHexString(0xFF & digest[i]);
if (digit.length() == 1) {
digit = "0" + digit;
}
hexString.append(digit);
}
result = hexString.toString();
} catch (Exception ex) {
result = "";
}
return result.toUpperCase();
}
public static String hexchar2bin(String md5str) throws UnsupportedEncodingException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream(md5str.length() / 2);
for (int i = 0; i < md5str.length(); i = i + 2)
{
baos.write((HEXSTRING.indexOf(md5str.charAt(i)) << 4 |
HEXSTRING.indexOf(md5str.charAt(i + 1))));
}
return new String(baos.toByteArray(), "ISO-8859-1");
}
/**
*
* @param qq http://check.ptlogin2.qq.com/check?uin={0}&appid=15000101&r={1} 返回的第三个值
* @param password QQ密码
* @param verifycode 验证码
* @return 加密后的密码
* @throws UnsupportedEncodingException
* @throws Exception
*/
public static String GetPassword(String qq,String password, String verifycode) throws Exception{
String P = hexchar2bin(md5(password));
String U = md5(P + hexchar2bin(qq.replace("\\x", "").toUpperCase()));
String V = md5(U + verifycode.toUpperCase());
return V;
}