<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version></dependency>
可根据须要更换成最新的版本号。
2. 配置加密密码Jasypt须要一个密码来进行加密和解密操作。你可以通过以下几种办法配置这个密码:
在配置文件中指定:在你的application.properties或application.yml配置文件中,添加jasypt.encryptor.password配置项,并设置你的密码。例如: # application.properties jasypt.encryptor.password=your_encryption_password
或者,在application.yml中:
jasypt: encryptor: password: your_encryption_password
然而,将密码直接写在配置文件中可能存在安全风险。因此,更推举的做法是通过启动参数或环境变量来通报这个密码。
通过启动参数指定:在启动运用程序时,可以通过-Djasypt.encryptor.password=your_encryption_password参数来指定加密密码。利用环境变量:在某些情形下,利用环境变量来存储敏感信息(如加密密码)可能更为安全。详细方法取决于你的运用程序支配环境。3. 加密敏感信息在配置加密密码后,你可以利用Jasypt供应的工具或API来加密你的敏感信息。加密后的信息将以密文形式存储。
利用Jasypt CLI工具:Jasypt供应了一个命令行界面(CLI)工具,许可你在命令行中加密和解密字符串。你须要下载Jasypt的jar包,并在命令行中运行相应的命令。利用Jasypt API:在你的Java运用程序中,你可以通过注入StringEncryptor接口的实现类来编程办法加密和解密字符串。这常日在你的Spring Boot运用程序中通过自动装置完成。4. 将加密信息存储到配置文件中加密敏感信息后,你须要将这些加密后的信息存储到配置文件中。在Jasypt中,加密后的信息常日以ENC(...)的形式涌现,括号内是加密后的密文。例如:
# application.propertiesdatasource.password=ENC(加密后的密码)
5. 运用程序启动时自动解密
当你的Spring Boot运用程序启动时,Jasypt会自动检测配置文件中的ENC(...)字符串,并利用你配置的加密密码来解密这些字符串。解密后的明文将用于运用程序的配置中。
把稳事变安全性:确保你的加密密码足够繁芜且安全存储,避免将密码直接写在配置文件中。版本兼容性:把稳你利用的Jasypt版本与其他库或框架的兼容性。算法选择:Jasypt支持多种加密算法,你可以根据须要在配置文件中指定加密算法。通过以上步骤,你可以在你的Spring Boot运用程序中利用Jasypt来加密和解密配置文件中的敏感信息。
二、利用示例代码1、通过工具类天生密文
在application.properties 中增加配置,或者通过-Djasypt.encryptor.password=123456参数来指定加密密码
# 用于加密的密码jasypt.encryptor.password=123456
利用 stringEncryptor.encrypt() 天生密文
public class JasyptSecretTest { @Autowired private StringEncryptor stringEncryptor; @Value("${datasource.password}") private String password; @Test public void encrypt(){ // 加密 String encrypt = stringEncryptor.encrypt("root"); System.out.println("encrypt = " + encrypt); }}
2、在application.properties 中增加配置密文
# 加密后的密文,包裹在ENC() 中datasource.password=ENC(grdksstYZMsPmwvA0ALHXpzBQN2YTyA3t4ow1PDfJzbl+UV0LdO8UlajWKeqUF7y)# 用于加密的密码jasypt.encryptor.password=123456
3、利用 @Value() 获取明文,也可以通过stringEncryptor.decrypt(encrypt)手动解密
@SpringBootTestpublic class JasyptSecretTest { @Autowired private StringEncryptor stringEncryptor; @Value("${datasource.password}") private String password; @Test public void encrypt(){ // 加密 String encrypt = stringEncryptor.encrypt("root"); System.out.println("encrypt = " + encrypt); // 解密,输入获取的加密字符串进行解密 String decrypt = stringEncryptor.decrypt(encrypt); System.out.println("decrypt = " + decrypt); } @Test public void show(){ System.out.println("password = " + password); }}
事理解释
SpringBoot项目在启动过程中,会自动注入beanStringEncryptor,用于根据不同的加密算法初始化不同的加解密实现类,通过StringEncryptorBuilder.build()初始化不同的加密算法
BeanNamePlaceholderRegistryPostProcessor
@Bean(name = ENCRYPTOR_BEAN_NAME)public StringEncryptor stringEncryptor( final EnvCopy envCopy, final BeanFactory bf) { final String customEncryptorBeanName = envCopy.get().resolveRequiredPlaceholders(ENCRYPTOR_BEAN_PLACEHOLDER); final boolean isCustom = envCopy.get().containsProperty(ENCRYPTOR_BEAN_PROPERTY); return new DefaultLazyEncryptor(envCopy.get(), customEncryptorBeanName, isCustom, bf);}
通过EncryptableMapPropertySourceWrapper重写了getProperty()方法,在获取配置值的时候,再做解密返回明文
DefaultPropertyResolver
@Overridepublic String resolvePropertyValue(String value) { return Optional.ofNullable(value) .map(environment::resolvePlaceholders) .filter(detector::isEncrypted) .map(resolvedValue -> { try { // 获取密文 String unwrappedProperty = detector.unwrapEncryptedValue(resolvedValue.trim()); String resolvedProperty = environment.resolvePlaceholders(unwrappedProperty); // 实行解密操作 return encryptor.decrypt(resolvedProperty); } catch (EncryptionOperationNotPossibleException e) { throw new DecryptionException("Unable to decrypt property: " + value + " resolved to: " + resolvedValue + ". Decryption of Properties failed, make sure encryption/decryption " + "passwords match", e); } }) .orElse(value);}
三、Jasypt配置项
Jasypt支持多种配置参数以进行密码、Digest认证、文本和工具的加密。以下是Jasypt支持的一些常见配置参数:
把稳:
这些参数紧张用于配置Jasypt加密器(StringEncryptor)的行为。在实际利用中,特殊是生产环境中,jasypt.encryptor.password等敏感信息不应该硬编码在配置文件中,而是通过环境变量、命令行参数或外部配置文件等办法安全地通报。Jasypt支持多种加密算法,如PBEWithMD5AndDES、PBEWithHMACSHA512ANDAES_256等,详细选择哪种算法取决于安全需求和环境配置。上述表格中的示例配置参数值仅为演示用场,实际利用时须要根据项目需求和安全策略进行配置。四、支持的加密算法Jasypt支持多种加密算法以保护敏感数据。以下是Jasypt支持的一些常见加密算法:
参考资料https://github.com/ulisesbocchio/jasypt-spring-boot