在Spring Boot项目中,经常必须连接到MongoDB等数据库,并将数据库连接的真实密码存储在Spring Boot项目的配置文件(application.yml或application.properties)中。甚至授权进行其他API调用所需的密码或令牌也以相同的方式存储。Jasypt库可以帮助你加密这些密码。
什么是Jasypt?
Jasypt Java为Spring Boot应用中的属性源提供了加密支持。它将帮助您以较少的工作量而无需编写任何代码就将基本的加密功能添加到项目中!是的,您没听错我的话,没有代码……在您的项目中到处都是。Springboot是一个非常强大的框架,可以帮助您添加加密功能,而无需实现任何加密方法。Jasypt是高度可配置的。
使用Jasypt加密的步骤:
步骤1→ 添加jasypt的maven依赖项
在pom.xml文件中,添加可以在maven存储库中轻松找到的maven依赖项。(我使用jasypt-spring-boot版本2.0.0,因为我发现它很稳定,并且遇到版本3.0.0的问题)
步骤2→在Spring Boot Application主配置类中添加注释
需要添加@EnableEncryptableProperties批注,以使应用程序了解整个Spring Environment的可加密属性。
步骤3→确定用于加密和解密的密钥
秘密密钥(您可以将其视为加密方法中使用的盐)用于加密密码,之后可以用于解密加密值以获取实际密码。您可以选择任何值作为密钥。
步骤4→生成加密密钥
可以通过以下两种方法之一生成加密密钥:
4.1:使用Jasypt在线工具:
通过传递所选的秘密密钥,此链接可用于生成加密密钥。
加密密码:abcd1234 |
4.2:使用jasypt Jar:
您可以从maven存储库下载jasypt jar文件,并通过以下命令运行它:
java -cp /<Path where the jar is located>/jasypt-1.9.3/lib/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=”xyz123" password=secretkey algorithm=PBEWithMD5AndDES |
以下是传递给运行jar的命令行参数的意义:
- 输入:abcd1234 (要加密的实际密码)
- 密码:hello(您选择的秘密密钥)
- 算法:PBEWithMD5AndDES (使用默认算法)
- 输出:scEjemHosjc / hjA8saT7Y6uC65bs0swg(输入的加密值)
注意:虽然加密值3.1和3.2中的加密String和OUTPUT分别不同,因为密钥相同,所以两种情况下的解密结果都相同(abcd1234)。
步骤5→将加密密钥添加到配置文件(application.yml或application.properties)中
现在,而不是添加实际密码如上面的“ abcd1234”,您需要添加通过以上任何一种方法生成的加密值。但是,jasypt依赖项将如何理解配置文件的特定属性需要解密?因此,为了使Jasypt知道您的加密值,它使用了一个约定,需要以以下格式添加:
ENC(<encrypted key>) |
在上图中,完成了数据库密码的加密。您可以在必须隐藏实际密码的任何情况下使用它。
步骤6:需要在运行时传递所选的秘密密钥以进行解密
您需要使Jasypt知道用于形成加密值的密钥。因此,以下是传递密钥的不同方法:
6.1:将其作为属性传递到配置文件中。像往常一样运行项目,解密就会发生。
jaypt: |
6.2: 使用以下命令运行项目:
$mvn-Djasypt.encryptor.password=<secretkey> spring-boot:run |
6.3: 环境设置JASYPT_ENCRYPTOR_PASSWORD=<secretkey>
JASYPT_ENCRYPTOR_PASSWORD=hello |
就可以通常的方式运行项目。
结论
有时有必要隐藏您不想在代码中公开的机密密码。因此,jasypt是在任何Spring Boot应用程序中实现此目标的简便且适当的方法。请按照上述6个步骤操作,您就可以开始…