首页IT科技密码的加密与解密(密码加密,天经地义)

密码的加密与解密(密码加密,天经地义)

时间2025-04-28 03:36:52分类IT科技浏览2911
导读:大家好,我是车辙,我的掘金小册《SkyWalking:应用监控和链路跟踪》已经上线啦,这是我的第一本电子书,欢迎大家订阅。...

大家好          ,我是车辙                  ,我的掘金小册《SkyWalking:应用监控和链路跟踪》已经上线啦     ,这是我的第一本电子书       ,欢迎大家订阅          。

整整好是9月的最后一天下午                  ,能按耐住冲动的是少之又少        ,至于原因嘛你懂的                  。赶高铁的准备赶高铁    ,没赶高铁的也假装赶高铁     。特别是开发同学                 ,脑门上就差贴张纸条:别打扰我       。

现在离跑路时间还有1小时           ,这个时间点被我司同事亲切的称呼为“交流时间          ”  ,俗称开会                  。这时候                ,钉钉的 ding 消息弹框而出              ,“有些项目组的数据库密码是明文,被系统检测出来了             ,国庆前必须修改完成                  ”        。

尼玛                 ,还国庆前  ,直接说今天不就行了          ,愤怒值 + 1    。“系统也真会赶时间                  ,有些领导下班前开会     ,你倒好       ,下班前来个安全检查     ”                  ,愤怒值直接 + 10086                 。

没办法        ,改呗           。其实心里知道还是自己的问题    ,就是想当然了                 ,没有做到最好           ,就和宝莲灯里二郎神教训沉香似的  ,凡事不能差一点  。这要是明文密码泄漏造成严重事故                ,年终奖泡汤还算是好的              ,说不定直接喜提 N+1

数据库明文加密

为了能按时“赶高铁       ”,凭借着早些年玩QQ炫舞的手速             ,还是被我找到了解决方案                。因为系统使用 Druid作为数据库管理                 ,可以利用 Druid自带的加密工具进行加密              。

首先通过它的ConfigTools对你的明文进行操作  ,生成公钥          、私钥以及加密后的密码。

// 需要加密的明文密码 String password = "youPassword"; // 调用 druid 工具类 生成私钥                  、公钥     、密文 ConfigTools.main(new String[]{password});

结果也和我们预期的一致          ,

privateKey:私钥                  ,用于密码的加密; publicKey:公钥     ,用于密码的解密; password:加密之后的密码

感觉有戏啊       ,把刚刚生成的密文填写到配置文件中                  ,也就是替换之前的明文             。

搞定        ,启动项目    ,果不其然的系统报错                 ,纳尼           ,是我操作的姿势不对?

看了报错结合分析  ,才发现是我公钥没有贴上去                 。之前也提到过                ,公钥主要用来进行密码的解密              ,你没进行配置,系统就误认为密码就是这样子             ,当然连接不上数据库  。瞧我这脑子                 ,也就只能装钱了          。

添加配置后如下所示  ,:

重新启动          ,大工搞成                  。正准备发到测试环境                  ,让测试大哥帮忙回归下     ,身边的同事来了句:                  ”其他类型的秘钥怎么办“?

完了       ,项目里还有浙政钉的秘钥                  ,微信的秘钥        ,理论上这些秘钥也是属于密码    ,那么这些配置该怎么加密呢                 ,也没有原生的SDK 提供加密呀?于是           ,偷摸的问了其他组的同事并许以金铲铲让鸡的重利下  ,才知道他们用了名为Jasypt的组件                ,之前压根就没听过     。好在我技高一筹              ,靠着疯狂百度,终于解决了这个坑爹的问题       。往下看!

Jasypt

Jasypt 可以和 SpringBoot 整合             ,只需要简单的配置                 ,就能够在项目启动时  ,把密文解密成明文                  。做到对用户加密不可见          ,对系统明文可见        。

这里得补充一句                  ,现在不能和 SpringBoot 整合的组件     ,想推广都好难    。

添加依赖

首先是添加 Jasypt 的SpringBoot依赖

<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency>

明文加密

jasypt的加密步骤依赖于某个Key       ,叫做盐值                 。通过它和某些算法对明文密码进行加密                  ,可以得到密文           。

有没有工具类可以尝尝鲜呀?我这边按照官网文档写了个工具类        ,在工具类中添加盐值    ,然后设置明文密码后调用                 ,可以得到下图所示的密文  。

有需要源码的可以在这个地址下免费获取           ,所有源码我都会整合在这个项目下面  ,链接

这个ENC(是Jasypt解密时的标识                ,至于被圈起来的就是我们的密文了              ,jasypt会在启动时

根据该标识对数据进行解密,最后存放到内存中                。

按照这种方式             ,我们就可以把所有被Spring管理的明文密码全部替换成密文                 ,然后启动时进行解密              。那么系统怎么知道盐值是什么呢?

添加盐值

我们之前只是手动在工具类设置了盐值  ,如何在系统中设置呢?最简单的方式就是在SpringBoot 配置文件中添加。

jasypt: encryptor: password: chezhe

如果觉得没问题的同学          ,建议您和沉香一样回炉重造下             。这种方式不就和我们之前犯得错误一样嘛                  ,丢了西瓜捡了芝麻                 。就如同不经调研     ,贸然引入技术       ,最后反而需要对这项技术付出极大的成本  。所以有句话我一直奉为经典:用的越多                  ,错的越多          。

还记的SpringBoot的启动方式吗        ,我们可以把盐值配置在启动脚本中                  。

java -jar -Djasypt.encryptor.password=chezhe chezhe.jar

应该都看的懂这什么意思吧     。看不懂的同学评论区评论    ,让各位大佬们帮忙回答下                 ,总不能被白嫖~

支持哪些加密算法

在这个版本中默认的是PBEWITHHMACSHA512ANDAES_256           ,当然它还支持PBEWithMD5AndDES或者 SM4等加密算法  ,有兴趣的同学可以去官网看看       。官网地址

总结

虽然最后“赶高铁        ”以失败告终                ,却学到了不少技能              ,喜提N+1 失败,也算是值了                  。通过Jasypt对明文密码加密             ,项目启动时解密                 ,最后把盐值存放到生产环境服务器中  ,大大降低了密码被盗的概率        。不过如果服务器被攻破了          ,那就当我没说......

对于代码中的密码安全问题                  ,大家还是要严谨     ,不要等到发现了才改    。第一是麻烦       ,因为要回归测试                  ,最好在第一次上线时就改掉                 。第二是在领导眼里印象也不好        ,可能还会影响绩效           。

最后希望大家多多点赞       、收藏  。就和买纸质书或者收藏电子书一样    ,点赞                  、收藏了                 ,也就代表学会了           ,不要问我怎么了解的这么清楚                。

我是车辙  ,掘金小册《SkyWalking》作者                ,一名常被HR调侃为XX杨洋的互联网打工人              ,              。

有需要源码

的同学可以关注公众号《车辙的编程学习圈》免费领取,之后的所有源码我都会整合在这个项目下面。也可以在此地址下             ,点击领取下获取             。

本文由博客一文多发平台 OpenWrite 发布!

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
php搜索引擎源码怎么用(phpcms搜索搜不到内容怎么办) 电脑显示无法创建文件夹(在win10中,为何桌面新建文件夹提示“无法创建文件夹”?)