在服务中不可避免的需要使用到一些秘钥(数据库、redis等)开发和测试环境还好,但生产如果采用明文配置将会有安全问题,jasypt是一个通用的加解密库,可以使用它。
jasypt默认使用StringEncryptor来进行加解密,也可以自定义自己的加解密类来替换它 。
Jasypt是一个Java库,Java 加密包,用于加密和解密敏感数据,例如密码和API密钥。
它允许开发者以最小的努力为他/她的项目添加基本的加密功能,而且不需要对密码学的工作原理有深刻的了解。
使用Jasypt对密码进行加解密可以保证密码的安全性。
以下是在Spring Boot应用程序中使用Jasypt加密和解密密码的示例代码:
com.github.ulisesbocchio jasypt-spring-boot-starter2.1.0
在应用程序配置文件(例如application.properties或application.yml)中指定加密和解密密钥。
例如:
jasypt.encryptor.password=mySecretKey
在应用程序中使用Jasypt加密和解密密码非常简单。
您只需要使用@Autowired注释注入org.jasypt.encryption.StringEncryptor bean,
并使用encrypt和decrypt方法加密和解密密码。
例如:
/** * 对数据库进行加密 * * @param passWord * @return */ @GetMapping("/encrypt") public String jasyptEncrypt(String passWord) { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); EnvironmentPBEConfig config = new EnvironmentPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); // 加密的算法,这个算法是默认的 config.setPassword("SDHYDZ"); // 加密的密钥,随便自己填写,很重要千万不要告诉别人 standardPBEStringEncryptor.setConfig(config); String encryptedText = standardPBEStringEncryptor.encrypt(passWord); return encryptedText; } /** * 对数据库进行解密 * * @param passWord * @return */ @GetMapping("/decrypt") public String jasyptDecrypt(String passWord) { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); EnvironmentPBEConfig config = new EnvironmentPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("SDHYDZ"); standardPBEStringEncryptor.setConfig(config); String plainText = standardPBEStringEncryptor.decrypt(passWord); return plainText; }
以下是在Spring Boot中使用Jasypt加解密密码的步骤:
com.github.ulisesbocchio jasypt-spring-boot-starter2.1.0
jasypt.encryptor.algorithm=PBEWithMD5AndDES jasypt.encryptor.password=your_secret_password
或者:
jasypt: encryptor: algorithm: PBEWithMD5AndDES #加密算法,不配置使用默认的 password: your_secret_password #加密秘钥
在配置文件中配置秘钥仍可能存在密码泄露的可能,因此我将秘钥放在项目启动是加载的:
@SpringBootApplication public class HyErpApplication { public static void main(String[] args) throws UnknownHostException { System.setProperty("jasypt.encryptor.password",SecHelper.decryptStr("6qNfbL8HgFdyj7IZyysdzTWf")); ConfigurableApplicationContext application = SpringApplication.run(HyErpApplication.class, args); } }
spring.datasource.password=ENC(encrypted_password)
或者:
spring: datasource: password: ENC(encrypted_password)