首页 > 解决方案 > 我需要从 Java 的属性文件中读取 @salt_key@ 和 @Secret_key。即在Java代码中声明

问题描述

@Bean

@Scope("prototype")

protected SecretKeySpec secretkey() throws InvalidkeySpecException, 
NoSuchAlgorithamException {

String secretKey = "Fra@d@15gt";

String salt = "Sa@t5dS3@";

KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), 65536, 256);

SecretKey tmp = secretKeyFactory().generateSecret(spec);

SecretKeySpec secretKey1 = new SecretKeySpec(tmp.getEncoded(), "AES");

return secretKey1;

}

标签: java

解决方案


首先将 secretKey 和 salt 存储在配置文件中,如下所示:

secretKey=Fra@d@15gt
salt=Sa@t5dS3@

然后在java代码中读取如下:

@Bean

@Scope("prototype")

protected SecretKeySpec secretkey(@Value("${secretKey}") final String secretKey,
        @Value("${salt}") final String salt) 
        throws InvalidkeySpecException, NoSuchAlgorithamException {
    KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), 65536, 256);  
    SecretKey tmp = secretKeyFactory().generateSecret(spec);
    SecretKeySpec secretKey1 = new SecretKeySpec(tmp.getEncoded(), "AES");
    return secretKey1;
}

确保里面的字符串@Value应该与你在配置文件中保存的完全匹配。对于不同的环境(如生产/QA/本地),会有不同的 secretKey 和 salt。对于每个环境,您可以使用特定于环境的值创建单独的文件。


推荐阅读