当前位置: 首页 > 后端技术 > Java

密码加密是理所当然的

时间:2023-04-01 18:22:28 Java

大家好,我是Cherut,我的金块小册子《SkyWalking:应用监控和链路跟踪》已经上线了。这是我的第一本电子书,欢迎大家订阅。正好是九月最后一天的下午,能抗拒这种冲动的人寥寥无几。至于原因,你懂的。赶高铁的准备赶高铁,没赶高铁的假装赶高铁。尤其是开发同学,额头上只有一张字条:别打扰我。距离运行时间还有一个小时。这段时间被同事们亲切地称为“交流时间”,俗称开会。这时,钉钉弹出提示信息,“部分项目组的数据库密码为明文,已被系统检测到,必须在国庆节前修改。”尼玛,国庆前,就说今天不行,怒气值+1。“系统真着急,有的领导下班前开会,你好,下班前来个安全检查”,愤怒值直接+10086。没办法,改吧。其实我心里也知道是我自己的问题,所以也就理所当然了,自己不努力的话,就像宝莲灯里面的二郎神在教训沉翔一样,一切都应该不会更糟。如果明文密码泄露,造成严重事故,丢掉年终奖也算不错了。为了准时“赶上高铁”,可能还要提一下N+1数据库的明文加密。找到我的解决方案。由于系统使用Druid作为数据库管理,所以可以使用Druid自带的加密工具进行加密。首先,通过其ConfigTools对您的明文进行操作,生成公钥、私钥和加密后的密码。//需要加密的明文密码Stringpassword="youPassword";//调用druid工具类生成私钥、公钥、密文ConfigTools.main(newString[]{password});结果也符合我们的预期,privateKey:私钥,用于加密密码;publicKey:公钥,用于解密密码;password:加密后的密码感觉有意思,将刚才生成的密文填入配置文件,即替换掉之前的明文。大功告成,启动项目,果不其然,系统报错,纳尼,我的操作姿势是不是不对?看了报错分析,发现是我的公钥没有贴出来。如前所述,公钥主要用于解密密码。如果不配置,系统会误认为密码是这样的,当然就连接不上数据库了。看我脑子,只能装钱。添加配置后如下:重启,大公大功告成。正当我准备发到测试环境,让测试人员帮我返回时,身边的同事说:“那其他类型的秘钥呢?”就是这样,项目中有折正定的秘钥和微信的秘钥。理论上这些秘钥也是密码,那么这些配置应该怎么加密呢,又没有原生SDK提供加密呢?于是,我偷偷询问了其他组的同事,答应用金铲子让鸡不偿失,才知道他们使用了一个我以前从未听说过的组件,叫Jasypt。好在我高人一等,靠着疯狂百度,终于解决了这个作弊问题。向下看!JasyptJasypt可以与SpringBoot集成。只需要简单配置,即可在项目启动时将密文解密为明文。使其对用户加密不可见,并以明文形式对系统可见。这里不得不补充一点,不能与SpringBoot集成的组件现在很难推广。添加依赖是先添加Jasypt的SpringBoot依赖>明文加密jasypt的加密步骤依赖于某个Key,称为盐值。通过一些算法对明文密码进行加密,可以得到密文。有什么工具可以试用吗?这里我按照官网文档写了一个工具类,在工具类中添加salt值,然后设置明文密码,调用得到如下图所示的密文。如果您需要源代码,可以在这个地址免费获取。我会整合这个项目下的所有源码,并链接这个ENC(是Jasypt解密时的标识,圈出来的是我们的密文,jasypt启动时会打开。根据识别,数据被解密,最后存入内存,这样我们就可以把Spring管理的明文密码全部替换成密文,然后在启动时解密,那么系统怎么知道salt值是多少呢?salt值?我们之前只是在工具类中手动设置了salt值,在系统中如何设置呢?最简单的方法就是在SpringBoot的配置文件中添加jasypt:encryptor:password:chezhe如果你觉得没有问题,建议大家回炉重修如沉香。这种做法是不是和我们之前犯的错误一样,丢了西瓜捡到了芝麻。这就好比没有研究就贸然引进技术,到头来需要为这项技术付出巨大的代价。所以有一句话我一直奉为经典:越用越错。还记得SpringBoot是如何启动的吗,我们可以在启动脚本中配置salt值。java-jar-Djasypt.encryptor.password=chezhechezhe.jar应该明白这是什么意思。不懂的同学在评论区评论,让大家帮忙解答,不能嫖~支持什么加密算法?此版本中的默认值为PBEWITHHMACSHA512ANDAES_256。当然也支持PBEWithMD5AndDES或者SM4等加密算法。有兴趣的同学可以去官网看看。官网地址总结虽然“赶高铁”以失败告终,但学到了很多技巧。值得一提的是,N+1失败了。明文密码经过Jasypt加密,在项目启动时解密,最后salt值保存在生产环境服务器,大大降低了密码被盗的概率。但是如果服务器被攻破了,那就当我没说吧……关于代码中的密码安全问题,大家要严谨一点,不要等到发现了再改。第一个麻烦,因为要回归测试,第一次上线的时候最好改。二是在领导眼里的印象不好,也可能影响业绩。最后,希望大家多多喜欢和收藏。就像买纸质书或收藏电子书一样,喜欢和收藏就意味着你学会了。不要问我怎么理解的这么清楚。我是CheRut,掘金小册子《SkyWalking》的作者,一个经常被HR嘲讽为XX杨洋的互联网工作者。需要源码的同学可以关注公众号《车辙的编程学习圈》免费获取,我会整合本项目下的所有源码。您也可以点击此地址接收