Java 密碼加鹽

只對密碼進行md5加密很容易反推出來,另外兩個用戶的密碼相同時,數據庫保存相同的密碼。
解決方法是在用戶的短密碼後面加上一段長字符,再計算 md5,這樣反推出原始密碼就變得非常困難,而且即使兩個用戶密碼相同,數據庫保存的密碼也不一樣。加上的這段長字符,稱爲鹽(Salt),通過這種方式加密的結果,稱爲 加鹽 Hash。

使用例子:
假設有兩個用戶admin和abc,密碼都爲123456,註冊時,鹽取用戶名+一個MD5值。
最終計算出來的密碼不一樣。

package com.example.shiro;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

public class TestPasswordSalt {
    public static void main(String[] args) {
        String pwd1 = md5("123456", "admin8d78869f470951332959580424d4bf4f");
        System.out.println(pwd1);
//密碼:d3c59d25033dbf980d29554025c23a75 String pwd2 = md5("123456", "abc0c23e95fd137ea96c4ef24366b7e6f1f"); System.out.println(pwd2);
//密碼:ae8bb0dd40e4eddeac081f8e31afdaed } public static final String md5(String password, String salt){ //加密方式 String hashAlgorithmName = "MD5"; //鹽:相同密碼使用不同的鹽加密後的結果不同 ByteSource byteSalt = ByteSource.Util.bytes(salt); //密碼 Object source = password; //加密次數 int hashIterations = 2; SimpleHash result = new SimpleHash(hashAlgorithmName, source, byteSalt, hashIterations); return result.toString(); } }

 數據庫表字段保存見下面表,登錄後取用戶名+salt進行驗證。

username password salt
admin d3c59d25033dbf980d29554025c23a75 8d78869f470951332959580424d4bf4f
abc ae8bb0dd40e4eddeac081f8e31afdaed 0c23e95fd137ea96c4ef24366b7e6f1f
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章