BCryptPasswordEncoder加密、验证策略

https://blog.csdn.net/qq_41256709/article/details/90212393

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41256709/article/details/90212393
         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
            <div class="htmledit_views" id="content_views">
                                        <p>通过查看源码,了解PasswordEncoder加密以及验证密码(数据库存储的加密密码与用户输入的密码比较)的流程、方式。</p>

加密:

 BCryptPasswordEncoder类有三个构造方法,影响了盐的生成,如果在生成BCryptPasswordEncoder对象的时候没有指定任何参数(或只指定了一个参数),BCrypt会提供默认值,最终都会调用BCrypt.gensalt(strength, random)方法来生成盐。接着看BCrypt类的hashpw()方法,在这个方法中根据salt值和明文密码来生成密文密码。具体的生成细节就不再展示了,有兴趣的可以自己去看。    需要记住的是,它是先 生成盐值,根据盐值以及明文密码 生成密文。

说完了加密方法,下面看看解密。BCryptPasswordEncoder的matches()方法代码如下:

先是针对从数据库拿到的密文密码做两个 if 验证。在满足验证的情况下,调用BCrypt.checkpw()方法验证用户输入的登录密码是否与数据库中存储的密文密码一致。进入到BCrypt中看一看这个具体的验证方法:

我们可以看到在红框部分,用作返回值的方法的第二个参数是hashpw方法。在上文的介绍中我们知道hashpw方法是用来加密的,第一个参数代表需要加密的明文密码,第二个参数是盐值。也就是说在验证过程中,将用户输入的登录密码作为第一个参数,用从数据库取出的密文密码作为盐值,由此生成的密码,与数据库中存储的密码的生成策略相同。接着把二者(已加密的用户登录密码和数据库存储的密码)作为参数传递到黑色方框方法里得到验证结果。

至此,关于BCryptPasswordEncoder类的密码加密、解密介绍完毕。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_world!

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值