奇安信 漏洞扫描:配置文件中密码明文显示

网上找的很多都是使用  jasypt 来加密 ,记录一下使用的整体过程

依赖

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

public class MyStringEncryptor implements StringEncryptor {

    /**
     * 加解密PBE 算法
     */
    public static final String PBE_ALGORITHMS_MD5_DES = "PBEWITHMD5ANDDES";
    public static final String PBE_ALGORITHMS_MD5_TRIPLEDES = "PBEWITHMD5ANDTRIPLEDES";
    public static final String PBE_ALGORITHMS_SHA1_DESEDE = "PBEWITHSHA1ANDDESEDE";
    public static final String PBE_ALGORITHMS_SHA1_RC2_40 = "PBEWITHSHA1ANDRC2_40";


//    public static void main(String[] args) {
//        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
//
//        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
//        // 加密盐值
//        config.setPassword("qizhi");
//        // 加解密算法
//        config.setAlgorithm(PBE_ALGORITHMS_MD5_DES);
//        // 设置密钥获取迭代次数
//        config.setKeyObtentionIterations(1000);
//        // 线程池大小:默认1
//        config.setPoolSize(1);
//        // 盐值生成器className
//        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
//        //  iv(initialization vector,初始化向量) 生成器className
//        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
//        // 设置字符串输出类型
//        config.setStringOutputType("base64");
//        encryptor.setConfig(config);
//        String encrypt = encryptor.encrypt("需要加密的密码");
//        System.out.println("ENC("+encrypt+")");
//
//    }

    /**
     * 加解密盐值
     */
    private String pa;
    /**
     * 加解密算法
     */
    private String algorithm = PBE_ALGORITHMS_MD5_DES;

    public MyStringEncryptor(String pa) {
        this.pa = pa;
    }

    public MyStringEncryptor(String password, String algorithm) {
        this.pa = password;
        this.algorithm = algorithm;
    }

    @Override
    public String encrypt(String message) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        // 加解密盐值
        encryptor.setConfig(getConfig(this.pa));
        return encryptor.encrypt(message);
    }

    @Override
    public String decrypt(String encryptedMessage) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(getConfig(this.pa));
        return encryptor.decrypt(encryptedMessage);
    }

    public SimpleStringPBEConfig getConfig(String password) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        // 加密盐值
        config.setPassword(password);
        // 加解密算法
        config.setAlgorithm(PBE_ALGORITHMS_MD5_DES);
        // 设置密钥获取迭代次数
        config.setKeyObtentionIterations(1000);
        // 线程池大小:默认1
        config.setPoolSize(1);
        // 盐值生成器className
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        //  iv(initialization vector,初始化向量) 生成器className
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        // 设置字符串输出类型
        config.setStringOutputType("base64");
        return config;
    }
}

里面的pa 就是 password , 为什么换了是因为password还是会被扫描出来

上面的是主要的加密解密方式等 

然后再注入到项目中

@Configuration
public class JasyptConfig  {

    /**
     * 加解密盐值
     */
    @Value("${jasypt.encryptor.password}")
    private String pa ;

    // @Bean("jasyptStringEncryptor")
    @Bean("myStringEncryptor")
    public StringEncryptor myStringEncryptor() {
        return new MyStringEncryptor(pa);
    }

}

在配置文件中 需要配置 加密的密钥 和 指定bean的名称

jasypt:
  encryptor:
    # 指定加解密在spring ioc容器中bean的名称,默认 jasyptStringEncryptor
    bean: myStringEncryptor
    password:

注意: 这里密码可以采用其他的 系统变量去设置,但是觉得麻烦,密码我是注释掉了,在代码里面加了一个定值 , 主要就是去通过扫描 。 

最后就是 把配置文件中的密码 替换成 ENC(*****) ,这个是工具类中 密码跑出来的值。

之前试的几种方式都是

Decryption of Properties failed, make sure encryption/decryption passwords match

说我配置的密钥不对,, 感觉这种方式最为稳妥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值