专业的编程技术博客社区

网站首页 > 博客文章 正文

如何加密SpringBoot应用的配置信息?其实很简单,看这篇就会了

baijin 2024-11-13 09:31:59 博客文章 4 ℃ 0 评论



一、加解密类库Jasypt

Jasypt是一个Java类库,开发人员可以用很简单的方式完成加解密功能,不需要深入研究加解密算法原理。

  1. 可以方便的集成到Spring(或Spring Boot)应用程序中,与Spring Security集成也很容易
  2. 高安全性的,基于标准的加解密技术,可以实现单向或者双向加密。可以加密密码,普通文本,数字,二进制文件等
  3. 可以方便的与Hibernate集成
  4. 可以用于加密的应用程序(即数据源)的配置
  5. 特定功能的高性能加密的multi-processor/multi-core系统。
  6. 与任何JCE(Java Cryptography Extension)提供者使用开放的API


二、使用bat脚本生成加密串和盐值(密钥)

为了方便,简单编写了一个bat脚本方便使用。


  • 使用 jasypt-1.9.2.jar中的org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI类进行加密
  • input参数是待加密的字符串,password参数是加密的密钥(盐值)
  • 使用PBEWithMD5AndDES算法进行加密

注意:jasypt-1.x.y.jar文件需要和bat脚本放在相同目录下。

使用示例:

注意:相同的盐值(密钥),每次加密的结果是不同的。

三、Jasypt与spring boot整合


首先引入Jasypt的maven坐标


在properties或yml文件中需要对明文进行加密的地方的地方,使用ENC()包裹,如原值:"happy family",加密后使用“ENC(密文)”替换。

为了方便测试,在properties或yml文件中,还需要做如下配置


简单来说,就是在需要加密的值使用ENC(和)进行包裹,即:ENC(密文)之后像往常一样使用@Value("${properties-name}")获取该配置即可,获取的是解密之后的值。

四、如何存储盐值(密钥)更安全

本身加解密过程都是通过盐值进行处理的,所以正常情况下盐值和加密串是分开存储的。盐值应该放在系统属性、命令行或是环境变量来使用,而不是放在同一个配置文件里面。

4.1 命令行存储方式示例

java -jar xxx.jar --jasypt.encryptor.password=123456

4.2 环境变量存储方式示例

或者设置环境变量(linux):


启动命令:

java -jar xxx.jar --jasypt.encryptor.password=${JASYPT_PASSWORD} 

五、这样真的安全么?

有的同学会问这样的问题:如果的linux主机被攻陷了怎么办,黑客不就知道了密钥?

对于这个问题:我只能这么说,如果你的应用从内部被攻陷,在这个世界上没有一种加密方法是绝对安全的。这种加密方法只能做到:防君子不防小人。大家可能都听说过,某著名互联网公司将明文数据库密码上传到了github上面,导致用户信息被泄露的问题。这种加密方式,无非是将密钥与加密结果分开存放,减少个人疏忽导致的意外,增加破解难度。

如果密钥被从内部渗透暴露了,任何加密都是不安全的。就像你的组织内部有离心离德的人,无论你如何加密都不安全,你需要做的是把他找出来干掉,或者防范他加入你的组织!

写在最后

点击我的头像进入我的主页,底栏导航里还有更多技术精品合集

本号只做持续的知识输出,希望您能关注、评论、转发!您的支持是我不竭的创作动力!让知识产生价值、让程序员改变世界!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表