Password Management:Hardcoded t加密配置文件中的敏感信息用户名密码等,也可以对代码里的明文密码进行加密处理;解决jdk17启动报错,ENC()ulisesbocchio
·
代码审查发现配置文件和代码里面有明文密码,需要进行加密处理
一、导入jar包,引入maven依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
二、配置文件或启动命令添加秘钥(加解密时候使用)
2.1 application.properties配置文件中增加秘钥,自定义
#jasypt加密的密匙
jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
2.2 application.yml配置文件中增加秘钥,自定义
#jasypt加密的密匙
jasypt:
encryptor:
password: PCqGBQe4JVXbehUF77eLnBO6mlMe7qsC
三、在控制器里调用接口,获取加密后的数据
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.jasypt.encryption.StringEncryptor;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.api.dto.TaskDTO;
import org.springblade.modules.api.entity.Task;
import org.springblade.modules.api.service.ITaskService;
import org.springblade.modules.api.vo.TaskVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.wildfly.common.Assert;
import javax.validation.Valid;
@RestController
@AllArgsConstructor
public class TestController {
@Autowired
StringEncryptor encryptor;
/**
* 详情
*/
@GetMapping("/test")
public void detail() {
//用户名
String name = encryptor.encrypt("test");
//密码
String password = encryptor.encrypt("test001");
System.out.println(name);
System.out.println(password);
Assert.assertTrue(name.length() > 0);
Assert.assertTrue(password.length() > 0);
}
}
输出结果(每次会生成不一样的加密,但不影响解密出来的结果)
四、将上面生成的name、password替换配置文件中的对应的参数替换后如下:
ENC( )是固定写法,( )里面是加密后的信息。

五、如果对代码里的进行处理,则把需要处理的字符串放到第三步获取出来,加到配置文件里,通过@Value注解获取
下图是加密后的明文密码,注意:必须加ENC()才能解密出来

可以在代码里通过@Value获取数据
//用户默认,重置、初始化密码
@Value("${blade.default-password}")
private String defaultPassword;
六、如果不想把秘钥放在配置文件里,可通过命令启动jar包的时候,放后面
java -jar -Djasypt.encryptor.password=你的秘钥 your-spring-boot-app.jar
--------------------------------------------------分割线-------------------------------------------------------
2025.3.27更新
上面的代码应于jdk8没问题,最近把项目升级升jdk17就出问题了,同样的代码启动不了,识别不到。经过试验把更新的代码放在下面
1、首先升级jar包,修改maven配置
<!--数据库密码加密-->
<!-- Maven 排除旧版本 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
<exclusions>
<exclusion>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 显式引入新版本 jasypt -->
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.3</version>
</dependency>
2、重新生成用户名和密码,或其他地方用到的数据
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.iv.RandomIvGenerator;
public class JasyptTest {
public static void main(String[] args) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("PCqGxxxxxxxqsC"); // 自定义的秘钥,与启动参数一致
encryptor.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); // 加密算法(强安全算法)
encryptor.setIvGenerator(new RandomIvGenerator()); // 初始化向量生成器(必须与算法匹配)
encryptor.setKeyObtentionIterations(1000); // 密钥派生迭代次数(推荐 1000 以上)
encryptor.setProviderName("SunJCE"); // 加密服务提供者(确保算法支持)
//替换成需要加密的字符串
String plainText = "username";
String encrypted = encryptor.encrypt(plainText);
System.out.println("加密结果: ENC(" + encrypted + ")");
String decrypted = encryptor.decrypt(encrypted);
System.out.println("解密结果: " + decrypted);
}
}
3、替换原来的

发现加密后的明显变长了
4、可以在dev环境里配置,方便测试,部署的时候把秘钥拼在启动后面
本地环境测试用
#jasypt加密的密匙,用于数据库用户名密码,明文密码
# 加密算法(JDK 17 推荐使用更安全的算法)
jasypt:
encryptor:
algorithm: PBEWITHHMACSHA512ANDAES_256
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
key-obtention-iterations: 1000
provider-name: SunJCE
password: PCqGxxxxxxxqsC
通过启动参数传递
java -jar -Djasypt.encryptor.password=PCqGxxxxxxxqsC your-spring-boot-app.jar
更多推荐
所有评论(0)