一般而言,数据库存放的密码都是加密后的密文,而不可能是明文显示,这是为了安全性考虑,谨防有心人能够破解密码或者直接得到密码从而干出一些非法的勾当来。废话不多说,一起看看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中