Jasypt 实现自定义加解密

如下文章已经讲解了, Jasypt 是什么,怎么集成 Jasypt,怎么使用 Jasypt。

Jasypt 开源加密库使用教程_jasyptstringencryptor-CSDN博客Jasypt 加密框架概述1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。2、有需求就有人奉献,Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。3、_jasyptstringencryptorhttps://blog.csdn.net/wangmx1993328/article/details/106421101

上述讲的都是属性加密,使用 ENC() 包裹,然后使用 StringEncryptor 加解密属性。这些都是默认使用方式。下面我们一起来研究一下如何自定义属性包裹方式和属性加解密方式。
1、自定义解密属性

重写 EncryptablePropertyDetector 这个 bean ,实现 isEncrypted 和 unwrapEncryptedValue 方法


private static class MyEncryptablePropertyDetector implements EncryptablePropertyDetector {
    @Override
    public boolean isEncrypted(String value) {
        if (value != null) {
            return value.startsWith("ENC@");
        }
        return false;
    }

    @Override
    public String unwrapEncryptedValue(String value) {
        return value.substring("ENC@".length());
    }
}


@Bean(name = "encryptablePropertyDetector")
public EncryptablePropertyDetector encryptablePropertyDetector() {
    return new MyEncryptablePropertyDetector();
}
2、自定义属性解密方式

重写 EncryptablePropertyResolver ,实现 resolvePropertyValue 方法。

class MyEncryptablePropertyResolver implements EncryptablePropertyResolver {

    private final PooledPBEStringEncryptor encryptor;

    public MyEncryptablePropertyResolver(char[] password) {
        this.encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPasswordCharArray(password);
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize(1);
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
    }

    @Override
    public String resolvePropertyValue(String value) {
        if (value != null && value.startsWith("ENC@")) {
            return encryptor.decrypt(value.substring("ENC@".length()));
        }
        return value;
    }
}

@Bean(name="encryptablePropertyResolver")
EncryptablePropertyResolver encryptablePropertyResolver(@Value("${jasypt.encryptor.password}") String password) {
    return new MyEncryptablePropertyResolver(password.toCharArray());
}

https://github.com/ulisesbocchio/jasypt-spring-boot

你可能感兴趣的:(java,Jasypt)