1.在项目中导入加密需要用到的jar包
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency>
2.设置加密盐值本地加密
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
public class JasyptTest {
/**
* 加密盐值,使用完成后进行删除,不能提交到`生产环境`
*/
private final static String PASSWORD = 你的加密盐值;
public static void main(String[] args) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// 用于设置加密密钥。密钥是用于加密和解密字符串的关键信息。
config.setPassword(PASSWORD);
// 加密算法的名称,jasypt-3.0.5版本后默认的加密方式
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
// 用于设置加密时迭代次数的数量,增加迭代次数可以使攻击者更难进行密码破解。
config.setKeyObtentionIterations("1000");
// 加密器池的大小。池是一组加密器实例,可确保加密操作的并发性。
config.setPoolSize("1");
// 用于设置JCE(Java Cryptography Extension)提供程序的名称。
config.setProviderName("SunJCE");
// 用于设置生成盐的类名称。在此配置中,我们使用了org.jasypt.salt.RandomSaltGenerator,表示使用随机生成的盐。
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
// 用于设置Jasypt使用的初始化向量(IV)生成器的类名。初始化向量是在加密过程中使用的一个固定长度的随机数,用于加密数据块,使每个数据块的加密结果都是唯一的。在此配置中,我们使用了org.jasypt.iv.RandomIvGenerator类,该类是一个随机生成器,用于生成实时随机IV的实例。这样可以确保每次加密的IV都是唯一的,从而增加加密强度。
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
// 指定加密输出类型。在此配置中,我们选择了base64输出类型。
config.setStringOutputType("base64");
encryptor.setConfig(config);
// 明文1
String name_encrypt = "123";
// 明文2
String password_encrypt = "456";
String encrypt1 = encryptor.encrypt(name_encrypt);
String encrypt2 = encryptor.encrypt(password_encrypt);
System.out.println("明文加密1:" + encrypt1);
System.out.println("明文加密2:" + encrypt2);
// 密文解密
String decrypt1 = encryptor.decrypt(encrypt1);
String decrypt2 = encryptor.decrypt(encrypt2);
System.out.println("密文解密1:" + decrypt1);
System.out.println("密文解密2:" + decrypt2);
}
}
加密结果:
明文加密1:TQHXPSm5aBrXaBP5fAAstKE5SSiieUC7LQIRMxJAmznXRapo8GizYFuHrNh259M5
明文加密2:Mq8qSxrmkT4jpzXw/HXK+5ZRFbPtpbOBX1pVJxUg4YBw1E32VfAi4pgNDwiV/ISg
密文解密1:123
密文解密2:456
3.把加密后的密文放入配置文件
nacos: username: nacos password: ENC(B4JemeWCRL+CnqDczCVxB2yTcTsBoWmklYtqef5bHjFn0iOhN2YC2eAWTyN5iG41) discovery: # 服务注册地址 server-addr: 127.0.0.1:8850 config: username: nacos password: ENC(B4JemeWCRL+CnqDczCVxB2yTcTsBoWmklYtqef5bHjFn0iOhN2YC2eAWTyN5iG41) # 配置中心地址 server-addr: 127.0.0.1:8850 # 配置文件格式 file-extension: yml # 共享配置 shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
在配置文件中需要用ENC(),项目启动时读取到配置文件有此格式内容会自动解密。
4.加密的盐值最好不要放在项目代码中或配置文件中。可在启动的时候设置启动参数。
IDEA配置:
jar包启动:
java -Dfile.encoding=utf-8 -Djasypt.encryptor.password=你的盐值 -jar ****.jar
到此就配置完毕了,加密方式可根据自己的需要自行修改。
加密过程可参考以下链接中的2.ENC加载原理部分: