07-shiro中MD5+Salt的实现
0、算法的使用
package com.study;
import org.apache.shiro.crypto.hash.Md5Hash;
public class TestShiroMD5 {
public static void main(String[] args) {
//创建一个md5算法
/*
使用set方法,并不会对我们的明文进行加密
*/
//不仅使用了MD5算法,还是用了哈希散列使结果更加安全
// Md5Hash md5Hash = new Md5Hash();
//
// md5Hash.setBytes("123".getBytes());//对123进行加密
//
// String s = md5Hash.toHex();//转化成16进制
// System.out.println(s);//313233
//创建一个md5算法
/*
使用MD5Hash可以对我们的明文进行加密
*/
Md5Hash md5Hash = new Md5Hash("123");
System.out.println(md5Hash.toHex());//202cb962ac59075b964b07152d234b70
//使用MD5 + Salt进行处理(默认将盐拼接在明文的后面)
Md5Hash md5Hash1 = new Md5Hash("123", "X0*7PS");//第二个参数是我们的盐,可通过随机生成字符串的工具类生成
System.out.println(md5Hash1.toHex());//7bdf569281c8527d42b2a5894248fc8a
//使用MD5 + Salt + hash散列
Md5Hash md5Hash2 = new Md5Hash("123", "X0*7PS", 1024);//第三个参数表示哈希散列的次数,我们这里设置的1024次
System.out.println(md5Hash2.toHex());//d5a6b89a330bc2d7956092d2652890e0
}
}
/
/
/
/
/
/
/
/
一、md5对密码进行加密
(1)编写我们自定义的realm
package com.study.realm;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class CustomerMd5Realm extends AuthorizingRealm {
//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
//认证
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//获取身份信息
String principal = (String) token.getPrincipal();
//根据用户名查询数据库(第二个参数是123经过md5加密后的结果)
if("xiaochen".equals(principal)){
return new SimpleAuthenticationInfo(principal, "202cb962ac59075b964b07152d234b70", this.getName());
}
return null;
}
}
(2)使用我们自定义的realm

/
/
/
/
/
/
二、md5 + 随机盐
(1)编写我们的自定义realm

(2)使用我们的realm
这里的代码跟一的一样,因为如果我们的realm返回了随机盐,登录的时候就会自动把输入的密码拼接上我们的realm返回的随机盐,然后进行md5加密。

/
/
/
/
/
/
三、md5 + 随机盐 + 散列
默认散列一次,我们数据库中存储的密码散列了1024次,所以我们要在二的基础上指定我们的散列次数


浙公网安备 33010602011771号