相关推荐recommended
springboot 使用jasypt加密库实现数据库加解密
作者:mmseoamin日期:2024-04-27

 一、背景说明

在服务中不可避免的需要使用到一些秘钥(数据库、redis等)开发和测试环境还好,但生产如果采用明文配置将会有安全问题,jasypt是一个通用的加解密库,可以使用它。

jasypt默认使用StringEncryptor来进行加解密,也可以自定义自己的加解密类来替换它 。

二、Jasypt介绍 

2.1 Jasypt是什么?

Jasypt是一个Java库,Java 加密包,用于加密和解密敏感数据,例如密码和API密钥

它允许开发者以最小的努力为他/她的项目添加基本的加密功能,而且不需要对密码学的工作原理有深刻的了解。

使用Jasypt对密码进行加解密可以保证密码的安全性。

2.2 Jasypt的功能特性

  • 高安全性、基于标准的加密技术,既可用于单向加密也可用于双向加密。
  • 加密密码、文本、数字、二进制文件…与Hibernate的透明集成。
  • 适合集成到基于Spring的应用程序中,也可与Spring Security透明地集成。
  • 对应用程序的配置(即数据源)进行加密的综合能力。
  • 在多处理器/多核系统中具有高性能加密的特殊功能。
  • 开放的API,可与任何JCE供应商一起使用。
  • 提供了一组内置的加密和解密算法,用于保护敏感数据。
    • 其中包括使用对称加密算法(如AES和Blowfish)和非对称加密算法(如RSA)进行加密和解密。

    三、示例1:在Spring Boot中使用Jasypt加密和解密敏感数据

    • 在Spring Boot中使用Jasypt加密和解密敏感数据非常简单。
    • 您只需要在Spring Boot应用程序中添加Jasypt依赖项,并在应用程序配置文件中指定加密和解密密钥即可。

      以下是在Spring Boot应用程序中使用Jasypt加密和解密密码的示例代码:

      3.1 添加Jasypt依赖项

      
          com.github.ulisesbocchio
          jasypt-spring-boot-starter
          2.1.0
      

      3.2 配置加密和解密密钥

      在应用程序配置文件(例如application.properties或application.yml)中指定加密和解密密钥。

      例如:

      jasypt.encryptor.password=mySecretKey

      3.3 在应用程序中使用加密和解密功能

      在应用程序中使用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;
          }

      四、示例2:在Spring Boot中使用Jasypt加解密密码的步骤

      以下是在Spring Boot中使用Jasypt加解密密码的步骤:

      4.1 在pom.xml文件中添加依赖

      
          com.github.ulisesbocchio
          jasypt-spring-boot-starter
          2.1.0
      

       4.2 在application.properties或application.yml中配置加密算法和密钥:

      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);
          }
      }

      4.3 在application.properties或application.yml中使用加密后的密码:

      spring.datasource.password=ENC(encrypted_password)
      

      或者:

      spring:
        datasource:
          password: ENC(encrypted_password)