在 Spring Security 文檔中有這麼一句話: "鹽值的原理非常簡單,就是先把密碼和鹽值指定的內容合併在一起,再使用md5對合並後的內容進行演算,這樣一來,就算密碼是一個很常見的字符串,再加上用戶名,最後算出來的md5值就沒那麼容易猜出來了。因爲攻擊者不知道鹽值的值,也很難反算出密碼原文。"
呵呵, 問題如何理解這句話: "先把密碼和鹽值指定的內容合併在一起,再使用md5對合並後的內容進行演算". 例如, 在 applicationContext-security.xml 文件中的配置如下:
[xhtml] view plaincopy
01.<authentication-provider user-service-ref="userDetailsService">
02. <password-encoder hash="md5">
03. <!-- 將每個用戶的username作爲鹽值 -->
04. <salt-source user-property="username"/>
05. </password-encoder>
06.</authentication-provider>
假設用戶名是 Tom, 密碼爲 123456, 那麼在數據庫中存放的值應該是什麼?
通過查看 Spring Security 的 org.springframework.security.providers.encoding.BasePasswordEncoder 類可知 Spring Security 通過如下方式來匹配在數據庫中已經被鹽值加密的密碼:
[java] view plaincopy
01.protected String mergePasswordAndSalt(String password, Object salt, boolean strict) {
02. if (password == null) {
03. password = "";
04. }
05.
06. if (strict && (salt != null)) {
07. if ((salt.toString().lastIndexOf("{") != -1) || (salt.toString().lastIndexOf("}") != -1)) {
08. throw new IllegalArgumentException("Cannot use { or } in salt.toString()");
09. }
10. }
11.
12. if ((salt == null) || "".equals(salt)) {
13. return password;
14. } else {
15. return password + "{" + salt.toString() + "}";
16. }
17.}
即通過 password + "{" + salt.toString() + "}" 中方式把 "密碼和鹽值指定的內容合併在一起". 所以對於用戶名是 Tom, 密碼爲 123456 的用戶在數據庫中存放的密碼應該爲對 "123456{Tom}" md5 驗算後的值: 610c492873b994f96f93e342a56bcd68
Spring Security 中的鹽值加密
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
深入瞭解O2OA開發平臺如何支撐涉密應用系統技術要求
原創
2024-04-24 10:25:16
AI大模型時代:企業如何構建數據智能基礎設施
原創
2024-02-21 12:33:41
鹽值加密-MD5
什麼叫鹽值加密 Spring security怎樣進行鹽值加密以前的md5原理是密碼密文=md5算法(密碼明文);這樣明文與密文其實還是一一對應的那麼
iteye_11864
2020-07-03 22:29:26
【linux】循序漸進學運維-基礎篇-grub加密技術
高胜寒|职场引路人
2020-07-03 06:22:25
實驗名稱:SSH公鑰認證
一、實驗的目的 加密技術是最常用的安全保密手段,數據加密技術的關鍵在於加密/解密的算法和祕鑰的管理。 通過這次實驗讓我們自身感受到加密技術的奧祕。
jamin_tan007
2020-06-23 11:08:31
SQL Server 2005數據加密技術應用研究
cailinsun666
2020-06-16 11:53:12
簡單、生動漫畫講述什麼是MD5加密算法(轉載,resource url見文末)
yolee is zyl
2020-04-28 04:23:04
細說SQL Server中的加密
cailinsun666
2020-02-25 16:16:51
PHP加密技術
stonehan09
2020-02-25 14:53:55
Base64的介紹以及Base64URL介紹
爱六月的雨
2020-02-25 00:47:25
十分鐘學會Fiddler
Qcloud_KID
2020-02-24 14:54:59
PHP加密技術(一)
qq_36801966
2020-02-24 11:04:43
Java中常用的加密方法(JDK)
虫它
2020-02-24 09:26:11
非對稱加密算法RSA
虫它
2020-02-24 09:25:59