如何覆盖默认加密属性prefix/suffix?

How to override the default encrypted property prefix/suffix?

Jasypt 期望用“ENC(...)”包装加密属性。
我正在寻找一种方法来覆盖默认的 jasypt 加密 属性 前缀和后缀,如“secure[...]”。
有办法实现吗?

如果您使用纯 jasypt 库,则需要编写您自己的现有版本 EncryptableProperties 作为默认版本,仅支持 ENC( 作为前缀和 ) 作为后缀。



public class EncryptableProperties extends Properties {


    private final String prefix;

    private final String suffix;

    private final StringEncryptor encryptor;

    public EncryptableProperties(final Properties defaults, final StringEncryptor encryptor,
                                 final String prefix, final String suffix) {
        super(defaults);
        this.encryptor = encryptor;
        this.prefix = prefix;
        this.suffix = suffix;
    }

    public EncryptableProperties(final Properties defaults, final StringEncryptor encryptor){
        this(defaults,encryptor,"ENC(", ")");
    }

    @Override
    public String getProperty(String key) {
        String value = super.getProperty(key);
        return decode(value);
    }


    private String decode(String value) {
        if (value == null) {
            return value;
        }

        String decryptedValue = value;
        if (value.startsWith(prefix) && value.endsWith(suffix)) {
            int start = prefix.length();
            int end = value.length() - suffix.length();
            String encryptedValue = value.substring(start, end);

            decryptedValue = encryptor.decrypt(encryptedValue);
        }

        return decryptedValue;
    }

}

用法:

Properties encryptableProperties = new EncryptableProperties(properties,stringEncryptor,"CUSTOM_PREFIX(",")");

如果您使用 spring 引导集成

您可以使用以下两个属性来做到这一点

  • jasypt.encryptor.property.prefix
  • jasypt.encryptor.property.suffix

默认一个是:

jasypt.encryptor.property.prefix=ENC(
jasypt.encryptor.property.suffix=)

这些属性可用于以下库

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