背景:
公司切换机房,把war包放到新环境,MD5签名失败。
分析:
仅仅是换了台服务器,应用与代码无关,故查找精力放在环境上,无果,反复思量后,重新review代码。
发现问题
原始代码
public static String toMD5(String source) {
String md5String = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(source.getBytes());
md5String = byte2Hex(md.digest());
} catch (Exception ex) {
ex.printStackTrace();
}
return md5String;
}
修改后代码
public static String toMD5(String source) {
String md5String = null;
try {
//新MD5算法,兼容中文
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] btInput = source.getBytes("utf-8");
md.update(btInput);
md5String = byte2Hex(md.digest());
} catch (Exception ex) {
ex.printStackTrace();
}
return md5String;
}
分析
新旧环境jdk版本不同,对中文支持程度不同,为保证中文加密后一致,采用byte字节流转换的utf-8处理,保证编码统一,转换后秘钥就会一致了。