记录:425

场景:在在Spring Boot微服务中,使用jasypt-spring-boot-3.0.5的3种算法加解密yml配置文件内容。

版本:JDK 1.8,Spring Boot 2.6.3,jasypt-1.9.3,jasypt-spring-boot-3.0.5。

开源地址:https://github.com/ulisesbocchio/jasypt-spring-boot

1.在pom.xml引入依赖

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.5</version>
</dependency>

解析:引入jasypt-spring-boot-starter后,jasypt-1.9.3等相关依赖会被自动引入。

2.在yml文件中

jasypt-spring-boot-3.0.5的3种算法在yml配置文件指定,实际按需选择。

2.1使用PBEWithHMACSHA512AndAES_256算法

加密类: AES256TextEncryptor, 加密算法: PBEWithHMACSHA512AndAES_256。

jasypt-spring-boot-3.0.5默认就是使用PBEWithHMACSHA512AndAES_256,因此无需指定。

jasypt:
  encryptor:
    password: U3buwRJdQ2023
hub:
  example:
    password: ENC(C7KjxXpxXC/a/q1R8yCB+xkRIiHnDrDsmB8mEg3AWTvDNCf3nKiV09oZwHIS3SY9Sw1p3JfY3Ed7aWFEnVZ0rg==)

2.2使用PBEWithMD5AndDES算法

 加密类: BasicTextEncryptor, 加密算法: PBEWithMD5AndDES。

在yml中指定算法PBEWithMD5AndDES。

jasypt:
  encryptor:
    password: U3buwRJdQ2023
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
hub:
  example:
    password: ENC(/BxyrksOnj3U/HCwkRVySHRZs2s4eZveCVncPoCzHMI=)

2.3使用PBEWithMD5AndTripleDES算法

加密类:StrongTextEncryptor, 加密算法: PBEWithMD5AndTripleDES。

在yml中指定算法PBEWithMD5AndTripleDES。

jasypt:
  encryptor:
    password: U3buwRJdQ2023
    algorithm: PBEWithMD5AndTripleDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
hub:
  example:
    password: ENC(DSycZtCUhenQZLgpLmnKwFM20fGtEfv46aD8lyipSEE=)

3.测试代码

代码:

@RestController
@RequestMapping("/hub/example/city")
@Slf4j
public class CityController {
  @Value("${hub.example.password}")
  private String cusPassword;
  @GetMapping("/load01")
  public Object load01() {
      log.info("测试开始...");
      log.info("从yml文件中获取hub.example.password=" + cusPassword);
      log.info("测试结束...");
      return "执行成功";
  }
}

解析:

使用注解从yml中取出的加密内容已经成功解密。

4.生成加密示例代码

public class JasyptDemo {
  public static void main(String[] args) {
    f1_BasicTextEncryptor();
    f2_AES256TextEncryptor();
    f3_StrongTextEncryptor();
  }
  /**
   * 加密工具类: org.jasypt.util.text.BasicTextEncryptor
   * 加密算法: PBEWithMD5AndDES
   */
  public static void f1_BasicTextEncryptor() {
    BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
    System.out.println("当前加密方式: 加密类: BasicTextEncryptor, 加密算法: PBEWithMD5AndDES ");
    // 1.设置秘钥
    String salt = "U3buwRJdQ2023";
    textEncryptor.setPassword(salt);
    // 2.加密
    // 2.1加密内容
    String pd = "Hangzhou20230427";
    System.out.println("加密前:  " + pd);
    // 2.2加密操作
    String pdAfterEncrypt = textEncryptor.encrypt(pd);
    System.out.println("加密后:  " + pdAfterEncrypt);
    // 3.解密操作
    String pdAfterDecrypt = textEncryptor.decrypt(pdAfterEncrypt);
    System.out.println("解密后:  " + pdAfterDecrypt);
  }
  /**
   * 加密工具类: org.jasypt.util.text.AES256TextEncryptor
   * 加密算法: PBEWithHMACSHA512AndAES_256
   */
  public static void f2_AES256TextEncryptor() {
    AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
    System.out.println("当前加密方式: 加密类: AES256TextEncryptor, 加密算法: PBEWithHMACSHA512AndAES_256 ");
    // 1.设置秘钥
    String salt = "U3buwRJdQ2023";
    textEncryptor.setPassword(salt);
    // 2.加密
    // 2.1加密内容
    String pd = "Hangzhou20230427";
    System.out.println("加密前:  " + pd);
    // 2.2加密操作
    String pdAfterEncrypt = textEncryptor.encrypt(pd);
    System.out.println("加密后:  " + pdAfterEncrypt);
    // 3.解密操作
    String pdAfterDecrypt = textEncryptor.decrypt(pdAfterEncrypt);
    System.out.println("解密后:  " + pdAfterDecrypt);
  }
  /**
   * 加密工具类: org.jasypt.util.text.StrongTextEncryptor
   * 加密算法: PBEWithMD5AndTripleDES
   */
  public static void f3_StrongTextEncryptor() {
    StrongTextEncryptor textEncryptor = new StrongTextEncryptor();
    System.out.println("当前加密方式: 加密类: StrongTextEncryptor, 加密算法: PBEWithMD5AndTripleDES ");
    // 1.设置秘钥
    String salt = "U3buwRJdQ2023";
    textEncryptor.setPassword(salt);
    // 2.加密
    // 2.1加密内容
    String pd = "Hangzhou20230427";
    System.out.println("加密前:  " + pd);
    // 2.2加密操作
    String pdAfterEncrypt = textEncryptor.encrypt(pd);
    System.out.println("加密后:  " + pdAfterEncrypt);
    // 3.解密操作
    String pdAfterDecrypt = textEncryptor.decrypt(pdAfterEncrypt);
    System.out.println("解密后:  " + pdAfterDecrypt);
  }
}

以上,感谢。

2023年4月27日

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐