场景:
开发环境(windows下)调用第三方接口验签通过,发测试环境(linux下)后死活验签通过不了
原因:
md5是一项成熟的加密技术,问题应该在代码里,查了查感觉可能是字符编码的问题,导致加签没通过,这样的话只能是环境导致的字符编码出现问题,就我所知的有getBytes()方法是得到一个操作系统默认的编码格式的字节数组,发现公共代码里进行md5加密是要进行转字节的
/**
* md5加密
*/
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
} catch (NoSuchAlgorithmException e) {
}
return resultString;
}
所以这里的getBytes()不确定性太大,需要指定编码方式来降低耦合(代码与环境的耦合)。
解决方法:
将getBytes()方法指定具体的编码方式,如:getBytes("UTF-8")
/**
* md5加密
*/
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString
.getBytes("UTF-8")));
} catch (NoSuchAlgorithmException e) {
}
return resultString;
}