springBoot+ENC实现配置文件敏感字段加密

1.在项目中导入加密需要用到的jar包

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

2.设置加密盐值本地加密

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

public class JasyptTest {

    /**
     * 加密盐值,使用完成后进行删除,不能提交到`生产环境`
     */
    private final static String PASSWORD = 你的加密盐值;


    public static void main(String[] args) {

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();

        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        // 用于设置加密密钥。密钥是用于加密和解密字符串的关键信息。
        config.setPassword(PASSWORD);
        // 加密算法的名称,jasypt-3.0.5版本后默认的加密方式
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        // 用于设置加密时迭代次数的数量,增加迭代次数可以使攻击者更难进行密码破解。
        config.setKeyObtentionIterations("1000");
        // 加密器池的大小。池是一组加密器实例,可确保加密操作的并发性。
        config.setPoolSize("1");
        // 用于设置JCE(Java Cryptography Extension)提供程序的名称。
        config.setProviderName("SunJCE");
        // 用于设置生成盐的类名称。在此配置中,我们使用了org.jasypt.salt.RandomSaltGenerator,表示使用随机生成的盐。
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        // 用于设置Jasypt使用的初始化向量(IV)生成器的类名。初始化向量是在加密过程中使用的一个固定长度的随机数,用于加密数据块,使每个数据块的加密结果都是唯一的。在此配置中,我们使用了org.jasypt.iv.RandomIvGenerator类,该类是一个随机生成器,用于生成实时随机IV的实例。这样可以确保每次加密的IV都是唯一的,从而增加加密强度。
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        // 指定加密输出类型。在此配置中,我们选择了base64输出类型。
        config.setStringOutputType("base64");
        encryptor.setConfig(config);

        // 明文1
        String name_encrypt = "123";
        // 明文2
        String password_encrypt = "456";

        String encrypt1 = encryptor.encrypt(name_encrypt);
        String encrypt2 = encryptor.encrypt(password_encrypt);
        System.out.println("明文加密1:" + encrypt1);
        System.out.println("明文加密2:" + encrypt2);

        // 密文解密
        String decrypt1 = encryptor.decrypt(encrypt1);
        String decrypt2 = encryptor.decrypt(encrypt2);
        System.out.println("密文解密1:" + decrypt1);
        System.out.println("密文解密2:" + decrypt2);
    }
}

加密结果:

明文加密1:TQHXPSm5aBrXaBP5fAAstKE5SSiieUC7LQIRMxJAmznXRapo8GizYFuHrNh259M5
明文加密2:Mq8qSxrmkT4jpzXw/HXK+5ZRFbPtpbOBX1pVJxUg4YBw1E32VfAi4pgNDwiV/ISg
密文解密1:123
密文解密2:456 

 3.把加密后的密文放入配置文件

nacos:
  username: nacos
  password: ENC(B4JemeWCRL+CnqDczCVxB2yTcTsBoWmklYtqef5bHjFn0iOhN2YC2eAWTyN5iG41)
  discovery:
    # 服务注册地址
    server-addr: 127.0.0.1:8850
  config:
    username: nacos
    password: ENC(B4JemeWCRL+CnqDczCVxB2yTcTsBoWmklYtqef5bHjFn0iOhN2YC2eAWTyN5iG41)
    # 配置中心地址
    server-addr: 127.0.0.1:8850
    # 配置文件格式
    file-extension: yml
    # 共享配置
    shared-configs:
      - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

 在配置文件中需要用ENC(),项目启动时读取到配置文件有此格式内容会自动解密。

4.加密的盐值最好不要放在项目代码中或配置文件中。可在启动的时候设置启动参数。

IDEA配置:

 jar包启动:

 java -Dfile.encoding=utf-8 -Djasypt.encryptor.password=你的盐值  -jar ****.jar

 到此就配置完毕了,加密方式可根据自己的需要自行修改。

加密过程可参考以下链接中的2.ENC加载原理部分:

SpringBoot+ENC实现密钥加密的使用示例_java_脚本之家 (jb51.net)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值