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;
    }

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM