需求分析
在MySQL数据库中,我们常常需要对密码,⾝份证号,⼿机号等敏感信息进⾏加密,以保证数据的安全性.
如果使⽤明⽂存储,当⿊客⼊侵了数据库时,就可以轻松获取到⽤⼾的相关信息,从⽽对⽤⼾或者企业造 成信息泄漏或者财产损失.
⽬前我们⽤⼾的密码还是明⽂设置的,为了保护⽤⼾的密码信息,我们需要对密码进⾏加密
常用案例举例
比如常见的注册,当用户把账号密码发过来后,我们就可以对密码进行加盐加密,以下面这种形式存储在数据库中,这样大大增强了我们密码的安全性
经过MD5加密后的密⽂⽆法解密,但相同的密码经过MD5哈希之后的密⽂是相同的
理论上这个密文是无法激活成功教程的,只可以通过彩虹表(简单理解为字典)来查询,只不过彩虹表目前只能查到非常简单的密文的原密码,比如 1,2,3 哈哈
加盐加密逻辑+如何对比原数据(必看)
首先需要知道加盐是什么,加盐就相当于我们除了原密码的基础上给予了一个手动的盐值,来进行二次加密
官方回答:采⽤为⼀个密码拼接⼀个随机字符来进⾏加密,这个随机字符我们称之为"盐"
经过MD5加密后的密⽂⽆法解密,但相同的密码经过MD5哈希之后的密⽂是相同的
理论上这个密文是无法激活成功教程的,但因为相同的密码经过MD5哈希之后的密⽂是相同的,所以可以通过彩虹表(简单理解为字典)来查询,只不过彩虹表目前只能查到非常简单的密文的原密码,比如 1,2,3 哈哈
此片博客我们采用的加密算法是MD5算法
加密逻辑:
java语言基础加密问题分析
解密逻辑:
还是那句话,MD5本身是没法解密的
但同样的数据通过加密后密文是一样的,我们就可以通过这个逻辑来进行密文的对比验证
手写加密算法 —— 用md5 +盐值
首先,需要注意的是,我们这个虽然是手写,但其实还是用了md5的算法,毕竟加密这种数学逻辑,要想做到安全,肯定要用经过无数验证和推敲的算法。自己写的还是不太敢用的哈哈
导入依赖
我这里用的这个只要是个Spring项目,都可以直接用
代码如下:
绝对能用哦
注释写的特别全面,若有问题及时联系博主,博主看到会立即回复的
调用封装好的
用这个必须阅读下面的注意事项!!!
导入依赖
代码如下:
我们用到了 BCryptPasswordEncoder 这个类,它提供了封装好的加盐加密、对比密码等操作
需要注意的是,BCryptPasswordEncode不支持指定的盐值,盐值是它内部自己的算法生成的,确保即使是相同的数据加盐加密后也能得到不同的密文
虽然得到的是不同的密文。但使用它内置的matches函数仍然可以对比验证密码,得到我们想要的结果
必须阅读!—— 注意事项
当使用封装好的BCryptPasswordEncoder这个类时,需要引入security这个框架/依赖,随之而来的有一个非常重要的问题,或者说现象
你会发现启动SpringBoot项目后,很多接口都会返回401,这是因为security这个安全框架发挥了作用,但很明显我们并不想让所有接口返回401,因此我们启动类要加上这个注解
当然,SpringBoot项目启动类本身就有@SpringBootApplication这个注解,但没有括号里的值,你可以直接复制这个替换你的@SpringBootApplication注解,也可以单独加上括号中的值
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/25172.html