md5如何實現encodePassword加密方法


后台的加密代碼:用戶名:zhangsan   密碼:123

/**
     * 編譯密碼,即加密
     * @param user 用戶信息
     * @param password 密碼
     * @return 返回值為加密加鹽值后的密碼(密碼,用戶名)
     */
    private String encodePassword(VtUser user, String password) {
        Md5PasswordEncoder md5 = new Md5PasswordEncoder();
        //用戶名是鹽值,最后生成鹽值md5
        return md5.encodePassword(password, user.getUserName());
    }

測試用例:
userName: zhangsan
password: 123
加密后password: b2316c0d1ff0550298121a537ab93f21

先看下MessageDigestPasswordEncoder.java加密函數, 用戶名是鹽值, 最終生成鹽值MD5:

public String   encodePassword(String rawPass, Object salt) {
         String saltedPass = mergePasswordAndSalt(rawPass, salt, false); //字符串拼接成rawPass{salt}格式
         MessageDigest messageDigest = getMessageDigest();  //就是MessageDigest.getInstance
         byte[] digest = messageDigest.digest(Utf8.encode(saltedPass));  //轉換成utf-8格式字節流
         // "stretch" the encoded value if configured to do so
         for (int i = 1; i < iterations; i++) {
             digest = messageDigest.digest(digest);  //iterations的初值是1, 所以不會進來
         }
         if (getEncodeHashAsBase64()) {   //該函數默認返回false
             return Utf8.decode(Base64.encode(digest));
         } else {
             return new String(Hex.encode(digest)); //最終執行這一行
         }
    }

 


免責聲明!

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



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