Shiro的Sha256加盐加密 密码不匹配

先讲一下原理吧:直接把用户的密码存储在数据库,一旦数据库被入侵,密码就gg了,后果不堪设想,所以先把用户注册时输入的密码进行加密,最好是加密过程不可逆,这样永远无法知道原密码了,很好的保护,然后放进数据库。但是密码加密了,用户登录的时候,怎么进行密码比较呢?

加密的时候有个加密因子(salt),数据库中表加个salt的字段,把加密时用到的salt也加密后放在数据库里。登录进行密码比较的时候,把这个salt取出来,还用同样的这个salt对用户登录时提交的密码进行加密,如果用户登录时提交的密码是对的,那肯定和注册时加密得到的那个字符串一样。比较两次加密最后得到的字符串就好了!

 

这次错误:两次加密后得到的字符串不一样:

原因:注册时用的salt是Object类型,在利用hash函数进行加密时,salt要转化为ByteSource类型,这是shiro的一个类型。就是在这个转化的过程出了问题,不同类型的salt会进行不同操作的转化,salt同样的值,不同类型,最后出来的ByteSource.Util.byte(salt)是不一样的。然后再用这个ByteSource.Util.byte(salt)作为hash算法的加密因子,最后的字符串当然不一样。所以我把注册时的salt转为String。就OK了。

因为做登录比较时从数据库get出来的salt只能是String。因为对应数据库的varchar类型啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值