一. jasypt介绍

Jasypt(Java Simplified Encryption)是一个Java库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。

  • 基于标准的高安全性加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件…
  • 与 Hibernate 的透明集成。
  • 适合集成到基于 Spring 的应用程序中,也可以透明地与 Spring 安全性集成。
  • 用于加密应用程序(即数据源)配置的集成功能。
  • 多处理器/多核系统中高性能加密的特定功能。
  • 开放 API 以与任何 JCE 提供程序一起使用。

    官网:http://www.jasypt.org/
    GitHub: https://github.com/ulisesbocchio/jasypt-spring-boot

二. SpringBoot项目中集成jasypt

1.1 导入依赖

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

1.2 修改yml配置文件

jasypt:
  encryptor:
    # 加密的秘钥
    password: haha
    # 加密算法
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    property:
      # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密
      prefix: ENC(
      suffix: )

1.3 生成加密后的数据

package com.enfi.example.util;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;

public class JasyptUtils {
    /**
     * 加密
     *
     * @param plaintext 明文
     * @return
     */
    public static String encrypt(String plaintext) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        // 指定算法
        config.setAlgorithm("PBEWithMD5AndDES");
        // 指定秘钥,和yml配置文件中保持一致
        config.setPassword("haha");
        encryptor.setConfig(config);
        System.out.println(encryptor.encrypt(plaintext));
        // 生成加密数据
        return encryptor.encrypt(plaintext);
    }

    /**
     * 解密
     *
     * @param data 加密后数据
     * @return
     */
    public static String decrypt(String data) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setPassword("haha");
        encryptor.setConfig(config);
        System.out.println(encryptor.decrypt(data));
        // 解密数据
        return encryptor.decrypt(data);
    }
}

1.4 测试

调用加解密

image-1699887066197

输出

image-1699887235416

Nacos配置文件配置

image-1699888024696

获取配置

image-1699887381147

image-1699887391410

  • 执行environment.getProperty(“spring.datasource.dynamic.datasource.master.password”)或使用时@Value(“${spring.datasource.dynamic.datasource.master.password}”),您得到的是解密版本的secret.property.

部署

  • 将加密密码以明文形式写在配置文件中并不安全,实际开发中也不推荐这样使用。
  • 如果打包后部署项目,可以使用如下命令在启动项目时指定秘钥:
#方式1:
java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥

#方式2:
java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥