• springboot使用jasypt给配置文件密码加密


    前言:我们可以对配置文件中的密码进行脱敏

    依赖

    <dependency>
    	<groupId>com.github.ulisesbocchio</groupId>
    	<artifactId>jasypt-spring-boot-starter</artifactId>
    	<version>3.0.2</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置类

    这里使用了配置文件中的 platform.jasypt.saltCode 的值作为加密的盐值后缀,如果没有配置就默认使用 projectCode 作为盐值后缀,配置文件没有配置的情况下完整盐值:prefixValue_projectCode

    package con.pro.config;
    
    import org.jasypt.encryption.StringEncryptor;
    import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
    import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 加密配置类
     */
    @Configuration
    public class PropertiesEncryptorConfig {
    
        // 配置文件获取盐值后缀, 默认使用 saltKeyCode 作为后缀盐值
        @Value("${platform.jasypt.saltCode:saltKeyCode}")
        private String saltCode;
    
        // 默认bean名称为jasyptStringEncryptor,若要自定义bean名称,则需要在.properties配置项指定用到的加密bean,例如:jasypt.encryptor.bean=自定义bean名称
        @Bean(name = "jasyptStringEncryptor")
        public StringEncryptor jasyptStringEncryptor() {
            //集中式PBE字符串加密器
            PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
            //简单字符串形式的PBC配置
            SimpleStringPBEConfig config = new SimpleStringPBEConfig();
            //设置完整盐值:固定前缀+配置文件后缀,若配置文件未进行配置,则取默认后缀
            config.setPassword("prefixValue_" + saltCode);
            //设置使用的加密算法
            config.setAlgorithm("PBEWITHHMACSHA1ANDAES_256");
            //获取加密密钥散列迭代次数
            config.setKeyObtentionIterations("1000");
            //加密器池大小
            config.setPoolSize("1");
            //获取加密算法的java.security.Provider实现的名称(加密器的提供者)
            config.setProviderName("SunJCE");
            //设置盐生成器
            config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
            //设置初始向量IV生成器的类名
            config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
            //设置字节数组以base64格式输出
            config.setStringOutputType("base64");
            //将对应的配置设置到密码器上
            encryptor.setConfig(config);
    
            return encryptor;
        }
    
    //    public static void main(String[] args) {
    //        // 测试
    //        StringEncryptor stringEncryptor = new PropertiesEncryptorConfig().jasyptStringEncryptor();
    //        String password = "123456";
    //        String encrypt = stringEncryptor.encrypt(password);
    //        String decrypt = stringEncryptor.decrypt(encrypt);
    //        System.out.println("原始: " + password);
    //        System.out.println("加密: " + encrypt);
    //        System.out.println("解密: " + decrypt);
    //    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    在配置文件中使用

    直接在 application.properties 配置文件中使用 ENC 包裹住加密后的密码即可,他就会自动解析了

    # 加密前
    # gateway.api.password=123456
    # 加密后
    gateway.api.password=ENC(OwLaSNWcGGvSFQ4G1hvG8TvUAdU9odhdDcmQaBAiBni3TIUEDFwdO67xla7/+s1Z)
    
    # 加密后
    spring.datasource.druid.password=ENC(F971EmBsRpLI6A/BAtzQ15+QPqc9fnzmfcE5OnCgIekvF7TTKmjrWo+qvDpks/sb)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    PS 介绍一种使用jar包执行jar命令方式生成加密解密(仅适合已安装jdk环境下执行)

    #加密
    java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“zhilin123!@#” password=saltnewfor algorithm=PBEWITHHMACSHA1ANDAES_256 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator
    #解密
    java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=“hJ1yk5sGHRIMaoIG18ZjicpkeechjdeKlbzTPN3j5YjJDPxHNX/vEHcCDujwUVIg” password=saltnewfor algorithm=PBEWITHHMACSHA1ANDAES_256 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator

    input:待加密/解密值

    password:盐值

    algorithm:加密算法

    ivGeneratorClassName:初始向量IV生成器的类名,根据不同的算法,有些算法需要,有些则不需要,比如PBEWITHHMACSHA1ANDAES_256算法就需要,不带这个参数,则会报错:Operation not possible (Bad input or parameters)

  • 相关阅读:
    2024.3.14 C++
    LeetCode 888. Fair Candy Swap
    CsvHelper:一个轻便高性能的Csv文件读写操作开源库!
    Dapr 官方文档中文翻译 v1.5 版本正式发布
    Python之文件与文件夹操作及 pytest 测试习题
    求职攻略| 硬核公司的硬件笔试题长什么样?先来5道选择题
    初见QT,控件的基本应用,实现简单登录窗口
    centos7 crash调试内核
    开发自己的Prometheus Exporter、实现自定义指标
    Linux项目自动化构建工具--make&Makefile
  • 原文地址:https://blog.csdn.net/weixin_44953227/article/details/125613688