場景:
開發環境(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; }