shiro密码加密

shiro密码加密

1 MD5加密

在配置文件中设置自定义Realm对象的属性开启MD5加密

@Bean
public ShiroRealm userRealm(){
    ShiroRealm realm = new ShiroRealm();
    //设置加密算法为md5
    HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
    credentialsMatcher.setHashAlgorithmName("md5");
    //设置加密次数
    credentialsMatcher.setHashIterations(1024);
    realm.setCredentialsMatcher(credentialsMatcher);
    return realm;
}

在获取前端的密码后会在Realm中自动调用SimpleAuthenticationInfo(user,user.getPwd(),this.getName());

进行加密比较,具体的比较过程在该对象的源码中。

//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    UsernamePasswordToken userToken = (UsernamePasswordToken) token;
    UserEntity user = userService.findUserByName(userToken.getUsername());
    if (user!=null){
        log.info("密码:"+user.getPwd());
        System.out.println("密码"+user.getPwd());
        //匹配从数据库获取的到密码与前端传递的密码时候相同
        return new SimpleAuthenticationInfo(user,user.getPwd(),this.getName());
    }
    return null;
}

仅使用MD5加密的缺点:如果两个人的密码一样则数据里的密文也一样,任然存在不安全性。

2 MD5盐值加密

盐值一般是唯一的字符串,用用户名代替或者使用随机字符串,其数据类型是byte

可以使用ByteSource接口下的Util.bytes将字符串装换为byte

ByteSource salt = ByteSource.Util.bytes(user.getUserName());

具体使用如下:

ShiroConfig中还是设置自定义Realm对象的属性开启MD5加密。

在Realm的重写方法中使用盐值加密匹配即可

//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    UsernamePasswordToken userToken = (UsernamePasswordToken) token;
    UserEntity user = userService.findUserByName(userToken.getUsername());
    if (user!=null){
        log.info("密码:"+user.getPwd());
        log.info("thisName:"+this.getName());
        //盐值加密
        /*
            1. 以用户名作为盐值
        */
        log.info("userName:"+user.getUserName());
        ByteSource salt = ByteSource.Util.bytes(user.getUserName());
        log.info("salt:"+salt);
        //匹配从数据库获取的到密码与前端传递的密码时候相同
        return new SimpleAuthenticationInfo(user,user.getPwd(),salt,this.getName());
    }
    return null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值