开发者

SpringBoot3使用Jasypt实现加密配置文件

目录
  • 一. 使用步骤
    • 1. 添加依赖
    • 2.配置加密密码
    • 3. 加密敏感信息
    • 4. 将加密信息存储到配置文件中
    • 5.应用程序启动时自动解密
  • 二. Jasypt配置项
    • 三. 支持的加密算法

      一. 使用步骤

      1. 添加依赖

      <dependency>
          <groupId>com.github.ulisesbocchio</groupId>
          <artifactId>jasypt-spring-boot-starter</artifactId>
          <version>3.0.4</version&gwww.devze.comt;
      </dependency>
      

      2.配置加密密码

      Jasypt需要一个密码来进行加密和解密操作。编程客栈可以通过以下几种方式配置这个密码:

      在配置文件中指定 :在你的application.propertiesapplication.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)工具,允许你在命令行中加密和解密字符串。你需要下载Jasyptjar包,并在命令行中运行相应的命令。

      Jasypt JAR 文件下载地址 :

      jasypt-1.9.3.jar

      生成密钥

      使用 Jasypt 提供的命令行工具生成密钥。

      Java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="your-strong-password" password="your-secret-key" algorithm=PBEWithMD5AndTripleDES
      

      input:你要加密的字符串,例如数据库连接字符串、用户名、密码等。

      password:用于加密的密钥。

      algorithm:加密算法,推荐使用 PBEWITHHMACSHA512ANDAES_256

      使用Jasypt API :在你的Java应用程序中,你可以通过注入StringEncryptor接口的实现类来编程方式加密和解密字符串。这通常在你的Spring Boot应用程序中通过自动装配完成。

      /**
       * 加密控制器
       *
       * @author 鲁子狄
       **/
      @SaIgnore
      @RequiredArgsConstructor
      @RestController
      @RequestMapping("/jasypt")
      public class JasyptController {
      
          private final StringEncryptor stringEncryptor;
      
      编程客栈    /**
           * 加密
           *
           * @param text 明文
           * @return 密文
           */
          @RequestMapping("/encrypt")
          public String encrypt(String text) {
              return stringEncryptor.encrypt(text);
          }
      
          /**
           * 解密
           *
           * @param text 密文
           * @return 明文
           */
          @RequestMapping("/decrypt")
          public String decrypt(String text) {
              return stringEncryptor.decrypt(text);
          }
      }
      

      4. 将加密信息存储到配置文件中

      密钥格式如下:

      ENC(your-encrypted-string)
      

      加密敏感信息后,你需要将这些加密后的信息存储到配置文件中。在Jasypt中,加密后的信息通常以ENC(...)的形式出现,括号内是加密后的密文。例如:

      username: ENC(aHApYu/25KrMl/q6Mr7X+0jYRC8E52V62ciUqtzDelELeHUwUrgGDl1oQJvueXCt)
      password: ENC(A0bDpXcWODFJ7JXiDNVKU5n49RSLM4Q3e5ZtS5T+fTY54S12zazVyxHhbV49OzY7)
      

      5.应用程序启动时自动解密

      当你的Spring Boot应用程序启动时,Jasypt会自动检测配置文件中的ENC(...)字符串,并使用你配置的加密密码来解密这些字符串。解密后的明文将用于应用程序的配置中。

      注意: 如过用环境变量传参,本地启动时需要传入环境变量,jar包运行也一样

      -Djasypt.encryptor.password=your-encryptor-password
      

      本地

      SpringBoot3使用Jasypt实现加密配置文件

      jar包命令 :

      java -Djasypt.encryptor.password=your-encryptor-password -jar your-jar

      二. Jasypt配置项

      配置参数描述示例
      jASPyt.encryptor.password加密器的密码,用于解密属性jaspyt.encryptor.password=mySecretPassword
      jaspyt.encryptor.algorithm加密算法的名称jaspyt.encryptor.algorithm=PBEWithMD5AndDES
      jaspyt.encryptor.keyObtentionIterations获取密钥时使用的迭代次数jaspyt.encryptor.keyObtentionIterations=1000
      jaspyt.encryptor.poolSize加密池的大小(如果使用了池化加密器)jaspyt.encryptor.poolSize=1
      jaspyt.encryptor.providerName加密提供者的名称(如JCE提供者)jaspyt.encryptor.providerName=SunJCE
      jaspyt.encryptor.saltGeneratorClassName盐生成器的类名jaspyt.encryptor.saltGeneratorClassName=org.jasypt.salt.RandomSaltGenerator
      jaspyt.ehttp://www.devze.comncryptor.ivGeneratorClassName初始向量生成器的类名jaspyt.encryptor.ivGenejsratorClassName=org.jasypt.iv.NoIvGenerator
      jaspyt.encryptor.stringOutputType加密字符串的输出类型(如base64)jaspyt.encryptor.stringOutputType=base64
      jaspyt.encryptor.property.prefix加密属性前缀,用于识别加密属性jaspyt.encryptor.property.prefix=ENC(
      jaspyt.encryptor.property.suffix加密属性后缀,用于识别加密属性jaspyt.encryptor.property.suffix=)
      jaspyt.encryptor.proxyPropertySources是否通过代理截取属性值以进行解密jaspyt.encryptor.proxyPropertySources=true

      三. 支持的加密算法

      Jasypt支持多种加密算法以保护敏感数据。以下是Jasypt支持的一些常见加密算法:

      加密算法名称描述
      PBEWithMD5AndDES基于密码的加密(PBE),使用MD5作为散列函数和DES作为加密算法。这是一种较旧的加密算法,但在某些旧系统中可能仍在使用
      PBEWithMD5AndTripleDES与PBEWithMD5AndDES类似,但使用TripleDES作为加密算法,提供了更强的安全性。
      PBEWithHMACSHA512ANDAES_256使用HMAC-SHA-512散列函数和AES-256加密算法的组合,提供了非常高的安全性。这是Jasypt较新版本中推荐的加密算法之一(默认值)
      AES高级加密标准(AES),是一种广泛使用的对称加密算法。Jasypt支持不同长度的AES密钥,如AES-128、AES-192和AES-256
      RSARivest-Shamir-Adleman(RSA)算法,是一种非对称加密算法。它使用一对密钥:公钥用于加密数据,私钥用于解密数据

      到此这篇关于SpringBoot3使用Jasypt实现加密配置文件的文章就介绍到这了,更多相关SpringBoot3 Jasypt加密配置文件内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜