md5加密,同样的代码得到不同的加密结果(已解决)
场景:
开发环境(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; }
版权声明:本文为博主原创文章,转载请注明出处,谢谢!