SpringBoot3使用Jasypt加密数据库用户名、密码等敏感信息
一、使用步骤介绍
使用Jasypt(Java Simplified Encryption)进行数据加密和解密主要涉及几个步骤,包括引入依赖、配置加密密码、加密敏感信息、将加密信息存储到配置文件中,以及应用程序启动时自动解密。以下是详细的使用说明:
1. 引入依赖
首先,你需要在你的项目中引入Jasypt的依赖。如果你是使用Maven构建项目,可以在pom.xml
文件中添加如下依赖(注意版本号可能随时间更新,请参考最新版本):
可根据需要替换成最新的版本号。
2. 配置加密密码
Jasypt需要一个密码来进行加密和解密操作。你可以通过以下几种方式配置这个密码:
在配置文件中指定:在你的application.properties
或application.yml
配置文件中,添加jasypt.encryptor.password
配置项,并设置你的密码。例如:
或者,在application.yml
中:
然而,将密码直接写在配置文件中可能存在安全风险。因此,更推荐的做法是通过启动参数或环境变量来传递这个密码。
通过启动参数指定:在启动应用程序时,可以通过
-Djasypt.encryptor.password=your_encryption_password
参数来指定加密密码。使用环境变量:在某些情况下,使用环境变量来存储敏感信息(如加密密码)可能更为安全。具体方法取决于你的应用程序部署环境。
3. 加密敏感信息
在配置加密密码后,你可以使用Jasypt提供的工具或API来加密你的敏感信息。加密后的信息将以密文形式存储。
使用Jasypt CLI工具:Jasypt提供了一个命令行界面(CLI)工具,允许你在命令行中加密和解密字符串。你需要下载Jasypt的jar包,并在命令行中运行相应的命令。
使用Jasypt API:在你的Java应用程序中,你可以通过注入
StringEncryptor
接口的实现类来编程方式加密和解密字符串。这通常在你的Spring Boot应用程序中通过自动装配完成。
4. 将加密信息存储到配置文件中
加密敏感信息后,你需要将这些加密后的信息存储到配置文件中。在Jasypt中,加密后的信息通常以ENC(...)
的形式出现,括号内是加密后的密文。例如:
5. 应用程序启动时自动解密
当你的Spring Boot应用程序启动时,Jasypt会自动检测配置文件中的ENC(...)
字符串,并使用你配置的加密密码来解密这些字符串。解密后的明文将用于应用程序的配置中。
注意事项
- 安全性:确保你的加密密码足够复杂且安全存储,避免将密码直接写在配置文件中。
- 版本兼容性:注意你使用的Jasypt版本与其他库或框架的兼容性。
- 算法选择:Jasypt支持多种加密算法,你可以根据需要在配置文件中指定加密算法。
通过以上步骤,你可以在你的Spring Boot应用程序中使用Jasypt来加密和解密配置文件中的敏感信息。
二、使用示例代码
1、通过工具类生成密文
在application.properties 中增加配置,或者通过-Djasypt.encryptor.password=123456
参数来指定加密密码
使用 stringEncryptor.encrypt()
生成密文
2、在application.properties 中增加配置密文
3、使用 @Value()
获取明文,也可以通过stringEncryptor.decrypt(encrypt)
手动解密
原理说明
SpringBoot项目在启动过程中,会自动注入beanStringEncryptor
,用于根据不同的加密算法初始化不同的加解密实现类,通过StringEncryptorBuilder.build()
初始化不同的加密算法
BeanNamePlaceholderRegistryPostProcessor
通过EncryptableMapPropertySourceWrapper重写了getProperty()方法,在获取配置值的时候,再做解密返回明文
DefaultPropertyResolver
三、Jasypt配置项
Jasypt支持多种配置参数以进行密码、Digest认证、文本和对象的加密。以下是Jasypt支持的一些常见配置参数:
配置参数 |
描述 |
示例 |
---|---|---|
jasypt.encryptor.password |
加密器的密码,用于解密属性 |
jasypt.encryptor.password=mySecretPassword |
jasypt.encryptor.algorithm |
加密算法的名称 |
jasypt.encryptor.algorithm=PBEWithMD5AndDES |
jasypt.encryptor.keyObtentionIterations |
获取密钥时使用的迭代次数 |
jasypt.encryptor.keyObtentionIterations=1000 |
jasypt.encryptor.poolSize |
加密池的大小(如果使用了池化加密器) |
jasypt.encryptor.poolSize=1 |
jasypt.encryptor.providerName |
加密提供者的名称(如JCE提供者) |
jasypt.encryptor.providerName=SunJCE |
jasypt.encryptor.saltGeneratorClassName |
盐生成器的类名 |
jasypt.encryptor.saltGeneratorClassName=org.jasypt.salt.RandomSaltGenerator |
jasypt.encryptor.ivGeneratorClassName |
初始化向量生成器的类名 |
jasypt.encryptor.ivGeneratorClassName=org.jasypt.iv.NoIvGenerator |
jasypt.encryptor.stringOutputType |
加密字符串的输出类型(如base64) |
jasypt.encryptor.stringOutputType=base64 |
jasypt.encryptor.property.prefix |
加密属性前缀,用于识别加密属性 |
jasypt.encryptor.property.prefix=ENC( |
jasypt.encryptor.property.suffix |
加密属性后缀,用于识别加密属性 |
jasypt.encryptor.property.suffix=) |
jasypt.encryptor.proxyPropertySources |
是否通过代理截取属性值以进行解密 |
jasypt.encryptor.proxyPropertySources=true |
注意:
- 这些参数主要用于配置Jasypt加密器(
StringEncryptor
)的行为。 - 在实际使用中,特别是生产环境中,
jasypt.encryptor.password
等敏感信息不应该硬编码在配置文件中,而是通过环境变量、命令行参数或外部配置文件等方式安全地传递。 - Jasypt支持多种加密算法,如PBEWithMD5AndDES、PBEWithHMACSHA512ANDAES_256等,具体选择哪种算法取决于安全需求和环境配置。
- 上述表格中的示例配置参数值仅为演示用途,实际使用时需要根据项目需求和安全策略进行配置。
四、支持的加密算法
Jasypt支持多种加密算法以保护敏感数据。以下是Jasypt支持的一些常见加密算法:
以上就是SpringBoot3使用Jasypt加密数据库用户名、密码等敏感信息的详细内容,更多关于SpringBoot3 Jasypt加密数据库信息的资料请关注脚本之家其它相关文章!
最新评论