Spring Boot 中密码加密的两种姿势!
先说一句:密码是无法解密的。大家也不要再问松哥微人事项目中的密码怎么解密了!
密码无法解密,还是为了确保系统安全。今天松哥就来和大家聊一聊,密码要如何处理,才能在最大程度上确保我们的系统安全。
1.为什么要加密
2011 年 12 月 21 日,有人在网络上公开了一个包含 600 万个CSDN用户资料的数据库,数据全部为明文储存,包含用户名、密码以及注册邮箱。事件发生后 CSDN 在微博、官方网站等渠道发出了声明,解释说此数据库系2009年备份所用,因不明原因泄露,已经向警方报案,后又在官网发出了公开道歉信。在接下来的十多天里,金山、网易、京东、当当、新浪等多家公司被卷入到这次事件中。整个事件中最触目惊心的莫过于CSDN把用户密码明文存储,由于很多用户是多个网站共用一个密码,因此一个网站密码泄露就会造成很大的安全隐患。由于有了这么多前车之鉴,我们现在做系统时,密码都要加密处理。
这次泄密,也留下了一些有趣的事情,特别是对于广大程序员设置密码这一项。人们从 CSDN 泄密的文件中,发现了一些好玩的密码,例如如下这些:
- ppnn13%dkstFeb.1st 这段密码的中文解析是:娉娉袅袅十三余,豆蔻梢头二月初。
- csbt34.ydhl12s 这段密码的中文解析是:池上碧苔三四点,叶底黄鹂一两声
- ...
等等不一而足,你会发现很多程序员的人文素养还是非常高的,让人啧啧称奇。
2.加密方案
密码加密我们一般会用到散列函数,又称散列算法、哈希函数,这是一种从任何数据中创建数字“指纹”的方法。
散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来,然后将数据打乱混合,重新创建一个散列值。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
我们常用的散列函数有 MD5 消息摘要算法、安全散列算法(Secure Hash Algorithm)。
但是仅仅使用散列函数还不够,单纯的只使用散列函数,如果两个用户密码明文相同,生成的密文也会相同,这样就增加的密码泄漏的风险。
为了增加密码的安全性,一般在密码加密过程中还需要加盐,所谓的盐可以是一个随机数也可以是用户名,加盐之后,即使密码明文相同的用户生成的密码密文也不相同,这可以极大的提高密码的安全性。
传统的加盐方式需要在数据库中有专门的字段来记录盐值,这个字段可能是用户名字段(因为用户名唯一),也可能是一个专门记录盐值的字段,这样的配置比较繁琐。
Spring Security 提供了多种密码加密方案,官方推荐使用BCryptPasswordEncoder,BCryptPasswordEncoder使用 BCrypt 强哈希函数,开发者在使用时可以选择提供strength 和 SecureRandom 实例。strength越大,密钥的迭代次数越多,密钥迭代次数为 2^strength。strength 取值在4~31 之间,默认为 10。
不同于 Shiro 中需要自己处理密码加盐,在 Spring Security 中,BCryptPasswordEncoder就自带了盐,处理起来非常方便。
3.实践
3.1 codec 加密
commons-codec 是一个 Apache 上的开源项目,用它可以方便的实现密码加密。松哥在 V部落项目中就是采用的这种方案(https://github.com/lenve/VBlog)。在 Spring Security还未推出BCryptPasswordEncoder 的时候,commons-codec 还是一个比较常见的解决方案。
所以,这里我先来给大家介绍下 commons-codec 的用法。
首先我们需要引入 commons-codec 的依赖:
然后自定义一个 PasswordEncoder:
在 Spring Security 中,PasswordEncoder 专门用来处理密码的加密与比对工作,我们自定义MyPasswordEncoder并实现 PasswordEncoder 接口,还需要实现该接口中的两个方法:
- encode 方法表示对密码进行加密,参数 rawPassword 就是你传入的明文密码,返回的则是加密之后的密文,这里的加密方案采用了 MD5。
- matches 方法表示对密码进行比对,参数 rawPassword 相当于是用户登录时传入的密码,encodedPassword则相当于是加密后的密码(从数据库中查询而来)。
最后记得将 MyPasswordEncoder 通过 @Component 注解标记为 Spring 容器中的一个组件。
这样用户在登录时,就会自动调用 matches 方法进行密码比对。
当然,使用了 MyPasswordEncoder 之后,在用户注册时,就需要将密码加密之后存入数据库中,方式如下:
其实很简单,就是调用 encode 方法对密码进行加密。完整代码大家可以参考V部落(https://github.com/lenve/VBlog),我这里就不赘述了。
3.2 BCryptPasswordEncoder 加密
但是自己定义 PasswordEncoder 还是有些麻烦,特别是处理密码加盐问题的时候。
所以在 Spring Security 中提供了BCryptPasswordEncoder,使得密码加密加盐变得非常容易。只需要提供BCryptPasswordEncoder 这个Bean的实例即可,微人事就是采用了这种方案(https://github.com/lenve/vhr),如下:
创建 BCryptPasswordEncoder 时传入的参数 10 就是strength,即密钥的迭代次数(也可以不配置,默认为10)。同时,配置的内存用户的密码也不再是 123 了,如下:
这里的密码就是使用 BCryptPasswordEncoder 加密后的密码,虽然 admin 和 sang加密后的密码不一样,但是明文都是123。配置完成后,使用 admin/123 或者 sang/123 就可以实现登录。
本案例使用了配置在内存中的用户,一般情况下,用户信息是存储在数据库中的,因此需要在用户注册时对密码进行加密处理,如下:
用户将密码从前端传来之后,通过调用 BCryptPasswordEncoder 实例中的 encode方法对密码进行加密处理,加密完成后将密文存入数据库。
4.源码浅析
最后我们再来稍微看一下 PasswordEncoder。
- encode 方法用来对密码进行加密。
- matches 方法用来对密码进行比对。
- upgradeEncoding 表示是否需要对密码进行再次加密以使得密码更加安全,默认为 false。
Spring Security 为 PasswordEncoder 提供了很多实现:
但是老实说,自从有了 BCryptPasswordEncoder,我们很少关注其他实现类了。
PasswordEncoder 中的 encode 方法,是我们在用户注册的时候手动调用。
matches方法,则是由系统调用,默认是在DaoAuthenticationProvider#additionalAuthenticationChecks方法中调用的。
可以看到,密码比对就是通过 passwordEncoder.matches 方法来进行的。
本文转载自微信公众号「 江南一点雨」,可以通过以下二维码关注。转载本文请联系 江南一点雨公众号。
推荐系统
电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载
语言:中文版系统大小:2.98GB系统类型:Win8电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- 网络安全攻防:ZigBee安全
- 聚焦中小企业关键数据防护,昂楷新品企数保重磅发布
- 如何保护Word文档
- 特警强攻反被告,这家让政府赔大门的地下网络商终于黄了
- 360李均,与车有关的一切
- 微软宣布成功破坏已感染了全球900万台PC的Necurs僵尸网络
- DHCP安全维护范围
- Webshell与Serv-u结合获系统最高权限
- Dvbbs8.0 access 后台拿webshell for 2003
- 乌克兰黑客入侵美国证券,美国国务院悬赏100万$获取黑客信息
- Spring Boot 启动事件和监听器,太强大了!
- 网络安全保险迎发展机遇期
- 大势至共享文件管理系统的比较优势,专业的共享数据权限设置工具、公司共享文件管理系
- 穿越火线改名卡怎么用?
- SSM通信研究:如何拦截SSM代理流量
- 新兴技术或增加网络安全系统性风险
- 主板小板和大板的区别是什么?
- 网页自动弹出或不定时弹出的解决方法?
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1华硕主板专用Win7系统激活镜像下载_华硕主板专用Win7 64位旗舰增强版下载
- 2萝卜家园 GHOST WIN7 SP1 X86 正式优化版 V2017.03 (32位) 下载
- 3技术员联盟 GHOST WIN10 32位安全装机版 V2020.12 下载
- 4雨林木风Ghost Win10 超纯专业版x86 v2023.01免费最新下载
- 5Win10 64位优化版下载_萝卜家园 Ghost Win10 64位 优化专业版下载V2022.01
- 6雨林木风 GHOST Win7 SP1 X64 经典珍藏版 V2014.05 下载
- 7大地系统GHOST WIN7 万能旗舰版X64位 v2021.04最新免费下载
- 8番茄花园Ghost Win8.1 (X32) 纯净版2021年12月(免激活) ISO镜像免费下载
- 9电脑公司 Ghost XP SP3 国庆特别版 v2011.10 下载
- 10萝卜家园 GHOST XP SP3 游戏体验版 V2023.06 下载