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次,所以我们要在二的基础上指定我们的散列次数

posted @ 2021-11-21 17:15  不是孩子了  阅读(150)  评论(0)    收藏  举报