在java后台服务开发过程中,数据库密码,访问第三方服务的appkey等信息一般配置在配置文件中,为了安全利用Jasypt可以很方便的加密保存
第一步:
应用maven的配置文件:
<!-- jasypt 配置文件敏感信息加解密 --> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
第二,实现配置类
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 用于数据库密码加密
*/
@Configuration
public class JasyptConfiguration {
/**
* 加密密码
*/
private final static String PASSWORD_SALT = "12346";
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
// PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
// SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// config.setPassword(PASSWORD_SALT); // 加解密保持一致
// config.setAlgorithm("PBEWithMD5AndDES");
// config.setKeyObtentionIterations("1000");
// config.setPoolSize("1");
// config.setProviderName("SunJCE");
// config.setStringOutputType("base64");
// encryptor.setConfig(config);
return createEncryptor();
}
// public static void main(String[] args) {
// Scanner input = new Scanner(System.in, StandardCharsets.UTF_8.name());
// log.info("输入需要明文密码:");
// String plain = input.nextLine();
// String strEncrypted = encrypt(plain);
// log.info("加密后密码:" + strEncrypted);
// log.info("解密密码确认:" + decrypt(strEncrypted));
// }
//
// private static String encrypt(String plain) {
// return createEncryptor().encrypt(plain);
// }
//
// private static String decrypt(String encrypted) {
// return createEncryptor().decrypt(encrypted);
// }
private static PooledPBEStringEncryptor createEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(PASSWORD_SALT);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setProviderClassName(null);
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
其中在配置类中,需要注意的是config.setAlgorithm("PBEWithMD5AndDES");这个就是设置加密使用算法,很多文章中说可以使用配置文件的方式来使用,如下:
# jasypt 密码加密配置 jasypt: encryptor: # 加密盐值 password: jasypt # 加密算法设置 3.0.0 以后 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator
也是可以的,但是注意需要配置algorithm: PBEWithMD5AndDES,3.0后默认支持的算法为PBEWITHHMACSHA512ANDAES_256,SHA512加AES,需要jdk9以后才默认支持,如果还说jdk8的小伙伴们,需要特别注意这里面的坑
这些配置完了,就可以在我们的配置文件里面使用ENC(xxx), 加密串来使用了
比如数据的密码
spring.datasource.password=ENC(ducLJnCSD2UFnlszFdd5yQ==)
参考文章,如果在使用过程中还有疑问,可以参考下面的博客,他们写的更详细,更棒
https://www.cnblogs.com/zt007/p/18123319
https://blog.csdn.net/lhmyy521125/article/details/139475216