如何使用 Jasypt 在 Spring Boot 项目中加密密码
Spring Boot 是一个基于 Java 的框架,用于开发微服务以构建企业级应用程序。
在开发项目时经常会遇到需要连接 MongoDB 等数据库,并将数据库连接的真实密码存储在 spring boot 项目的配置文件(application.yml 或 application.properties)中。甚至授权进行其他 API 调用所需的密码或令牌也以相同的方式存储。
实际上,您可以避免在配置文件中添加实际密码并使用Java库“jasypt-spring-boot”。
什么是Jasypt?
Jasypt (Java Simplified Encryption) ,为 Spring Boot Applications 中的属性源提供加密支持。它将帮助您在项目中添加一些基本加密功能,而无需编写任何代码,而无需编写任何代码。 Springboot 是一个非常强大的框架,它将帮助您在不实现任何加密方法的情况下添加加密能力。 Jasypt 是高度可配置的。
使用 Jasypt 添加加密的步骤:
- 添加 jasypt 的 maven 依赖:在 pom.xml 文件中,添加可以在 maven 存储库中轻松找到的 maven 依赖。
- 在 Spring Boot Application 主 Configuration 类中添加注解:需要添加@EnableEncryptableProperties注解以使应用程序了解整个 Spring Environment 的可加密属性。
- 确定用于加密和解密的密钥 密钥用于加密密码,稍后可用于解密加密值以获得实际密码。您可以选择任何值作为密钥。
- 生成加密密钥 可以通过以下两种方法之一生成加密密钥:
- 使用 Jasypt 在线工具:
此链接可用于通过传递所选密钥来生成加密密钥。
- 加密密码:abcd1234
- 选择加密类型:双向加密(默认使用PBEWithMD5AndDES)
- 密钥:你好(可以是任何值)
- 加密字符串:kNuS1WAezYE7cph7zXVTiPSQSdHTx7Kv
您实际上可以使用该工具通过解密来加密和检查加密密钥。
- 使用 jasypt Jar:从 maven 存储库下载 jasypt jar 文件并通过以下命令运行它:
java -cp //jasypt-1.9.3/lib/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=”xyz123″ password=secretkey algorithm=PBEWithMD5AndDES
以下是传递给运行jar的命令行参数的意义:
- 输入:abcd1234(要加密的实际密码)
- 密码:你好(你选择的密钥)
- 算法:PBEWithMD5AndDES(使用默认算法)
- 输出:scEjemHosjc/hjA8saT7Y6uC65bs0swg(输入的加密值)
注意:虽然 3.1 和 3.2 中的加密值 ie Encrypted String & OUTPUT 不同,但由于密钥相同,所以两种情况下解密后的值相同(abcd1234)。
- 使用 Jasypt 在线工具:
- 在配置文件(application.yml 或 application.properties)中添加加密密钥:现在而不是添加实际密码,即。 “abcd1234”如上例,您需要添加上述任一方法生成的加密值。但是 jasypt 依赖项如何理解配置文件的特定属性需要解密呢?因此,为了让 Jasypt 知道您的加密值,它使用您需要以以下格式添加的约定:
ENC(encrypted key): ENC(scEjemHosjc/hjA8saT7Y6uC65bs0swg)
在上图中,完成了数据库密码的加密。您可以在必须隐藏实际密码的任何情况下使用它。
- 选择的密钥需要在运行时传递给解密:让 Jasypt 知道您用来形成加密值的密钥。因此,以下是传递密钥的不同方法:
- 将其作为配置文件中的属性传递。像往常一样运行项目,解密就会发生。
- 使用以下命令运行项目:
$mvn-Djasypt.encryptor.password=secretkey spring-boot:run
- 导出 Jasypt 加密器密码:
JASYPT_ENCRYPTOR_PASSWORD=hello