一般而言,數據庫存放的密碼都是加密後的密文,而不可能是明文顯示,這是爲了安全性考慮,謹防有心人能夠破解密碼或者直接得到密碼從而幹出一些非法的勾當來。廢話不多說,一起看看shiro是如何加密的。
1. 在博客三的CustomRealTest.java文件中增加了以下的加密代碼
代碼如下
// 創建加密
HashedCredentialsMatcher hashedCredentialsMatcher=new HashedCredentialsMatcher();
// 設置MD5加密
hashedCredentialsMatcher.setHashAlgorithmName("MD5");
// 設置MD5加密次數
hashedCredentialsMatcher.setHashIterations(1);
// 設置加密機制到自定義的CustomRealm中
customerRealm.setCredentialsMatcher(hashedCredentialsMatcher);;
defaultSecurityManager.setRealm(customerRealm);
2. 在博客三的CustomRealm.java文件中使用MD5加密,然後存儲
代碼如下
Md5Hash md5Hash=new Md5Hash("123");
System.out.println(md5Hash);
將打印出來的字符串複製到存放的密碼Map中
3. 編譯運行試試效果
4. 爲了更好的安全性
當我們密碼一致時,MD5加密後的密碼是一致的,這就會導致有暴力破解的可能性,因此我們需要加鹽
代碼如下,MD5加了鹽值
Md5Hash md5Hash=new Md5Hash("123","hashyanzhi");
System.out.println(md5Hash);
5. CustomRealm中的doGetAuthenticationInfo重寫加入以下代碼
simpleAuthenticationInfo.setCredentialsSalt(ByteSource.Util.bytes("hashyanzhi"));
6. 編譯運行
7.總結
7.1 使用MD5Hash類加密包括加鹽的加密
7.2 創建HashedCredentialsMatcher對象
7.3 設置MD5加密 setHashAlgorithmName("MD5")
7.4 設置MD5加密次數 setHashIterations(1)
7.5 設置加密機制到自定義的CustomRealm中