只知道这个的用法,心里着实难受,所以看了看底层,简单做下总结。
BCryptPasswordEncoder算法和shiro的区别: 其实和shiro中区别就是shiro 中的salt是自己指定的,然后存到数据库,BCryptPasswordEncoder加密算法是随机生成的和加密后的密码一起拼接到一起存到数据库。
举个我调试的时候的例子:
首先第一次注册的时候,会从后台先获取随机盐VM/wbXrA4UYbITsQKOHNF. 这个每一次的不一定因为随机的。 对明文密码进行加密,我输入的密码 123 用上边的随机盐加密后得到HBp2Bmiej/q/iggq/g6DMwcGlh3wxwi , 然后拼接到一起 2a10
之后登录的时候除了前端传过来的明文密码,从数据库中找到加密的密码,因为这个加密的密码中有加密时候的盐。 从加密的密码中把盐抽取出来VM/wbXrA4UYbITsQKOHNF. ,然后2a10
当设置这个rememberme之后,登录的时候会生成JSESSION 和 remember-me两个字段给前端。
Base64(Base64(用户名):Base64(过期时间):Base64(用户名和密码和过期时间加密))
判断是否有这个remember-me字段,有的话,先整体解码,再对用户名 和过期时间 进行Base64解码,从数据库获得密码,然后 new = Base64(Base64(用户名):Base64(过期时间):Base64(用户名和数据库获得密码和过期时间加密)),和前端的remeber-me 字符串进行匹配,相等之后就是登录状态。
再具体的请各位继续探索,学无止境。