md5加密 前后端不一致问题
java实现:
String key = Md5EncordUtil.getCode(str);//方法调用
/**
* 获取MD5加密后32位
* @author lx
*
*/
public class Md5EncordUtil {
public static String getCode(String str){
try {
MessageDigest obj = MessageDigest.getInstance("MD5");
obj.update(str.getBytes("UTF-8"));
byte[] digest = obj.digest();
final StringBuffer buffer = new StringBuffer();
for (int i = 0; i < digest.length; ++i) {
final byte b = digest[i];
final int value = (b & 0x7F) + (b < 0 ? 128 : 0);
buffer.append(value < 16 ? "0" : "");
buffer.append(Integer.toHexString(value));
}
return buffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}
前端js原生代码实现:
var key =md5(str,32);//方法调用
//字符串md5加密
function md5(string,bit) {
function md5_RotateLeft(lValue, iShiftBits) {
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
}
function md5_AddUnsigned(lX, lY) {
var lX4, lY4, lX8, lY8, lResult;
lX8 = (lX & 0x80000000);
lY8 = (lY & 0x80000000);
lX4 = (lX & 0x40000000);
lY4 = (lY & 0x40000000);
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
if (lX4 & lY4) {
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
}
if (lX4 | lY4) {
if (lResult & 0x40000000) {
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
} else {
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
}
} else {
return (lResult ^ lX8 ^ lY8);
}
}
function md5_F(x, y, z) {
return (x & y) | ((~x) & z);
}
function md5_G(x, y, z) {
return (x & z) | (y & (~z));
}
function md5_H(x, y, z) {
return (x ^ y ^ z);
}
function md5_I(x, y, z) {
return (y ^ (x | (~z)));
}
function md5_FF(a, b, c, d, x, s, ac) {
a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_F(b, c, d), x), ac));
return md5_AddUnsigned(md5_RotateLeft(a, s), b);
};
function md5_GG(a, b, c, d, x, s, ac) {
a = md5_AddUnsigned(a,