SpringBoot+ENC加密&密钥存储位置
学习于文章:https://blog.csdn.net/zhuocailing3390/article/details/139908244
pom中需要配置jasypt
依赖
<dependencies>
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
</dependencies>
(1)配置文件中记录密钥
jasypt:
encryptor:
password: hhX4FzbwcT
(2)写在jar包里
importorg.jasypt.encryption.pbe.StandardPBEStringEncryptor;
publicclassJasyptTest {
/**
* 加密盐值,使用完成后进行删除,或者不能提交到`生产环境`,比如:
*/
privatefinalstaticStringPASSWORD="hhX4FzbwcT";
publicstaticvoidmain(String[]args) {
PooledPBEStringEncryptorencryptor=newPooledPBEStringEncryptor();
SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();
// 用于设置加密密钥。密钥是用于加密和解密字符串的关键信息。
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
Stringname_encrypt="root";
// 明文2
Stringpassword_encrypt="123456";
// 明文加密
Stringencrypt1=encryptor.encrypt(name_encrypt);
Stringencrypt2=encryptor.encrypt(password_encrypt);
System.out.println("明文加密1:"+encrypt1);
System.out.println("明文加密2:"+encrypt2);
// 密文解密
Stringdecrypt1=encryptor.decrypt(encrypt1);
Stringdecrypt2=encryptor.decrypt(encrypt2);
System.out.println("密文解密1:"+decrypt1);
System.out.println("密文解密2:"+decrypt2);
}
}
在spring boot项目配置文件中的ENC加密配置:
sys:
name:ENC(Yt36hceu3xGXEzrz2jCPjvalaXQ5yIHE04SVT6lIkcktrxqtBZrlivkAkA9/9oZ2)
password:ENC(0Ci6irPOko9IG+hBZJAGoguIuE52gF/XiigCV4DwLm6NfkoyvV4Etgc9FzKK3MYl)
以ENC(xxxxxxxxxxxxx)
形式存储密文
在controller中对密文调用:
@RestController
publicclassTestController {
@Value("${sys.name}")
privateStringname;
@Value("${sys.password}")
privateStringpassword;
@GetMapping("/test")
publicvoidtest() {
System.out.println("name = "+name);
System.out.println("password = "+password);
}
}
其他涉及知识点在往期内容中:
MySql数据库部分知识:
电子数据取证每日一练-数据库和网站恢复
Spring Boot框架部分知识:
电子数据取证每日一练-服务器取证4
Docker容器部分知识:
电子数据取证每日一练-服务器取证5-docker容器
题目解析
1.重建完整的系统后,redis对外暴露的端口号是多少?(答案格式:数字) (3分)
16379
2.请找出加密mysql数据库连接密码所用的加密密钥(盐值)?(答案格式:注意大小写) (3分)
F*DZ-kZMs5qt
服务都在docker里,inspect查看jdk:17.0容器的具体信息,找到网站使用的jar包和yml配置文件
在jar包中搜索setPassword
3.请分析得出相亲网站的后台数据库中哪张表存放了会员相关信息,写出表名? (6分)
a_member_st
在源码中搜“会员”,查询到使用的表名为a_member_st
,所以不是blind_date数据库中的a_member
,去看blind_date2
使用s048-3.0.0
里的jastpy-1.9.3.jar
把blind_date2数据库的密码解密出来
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=064l9Wwf9KjXlSz0phcwvg+R5xwzCNl7 password=F*DZ-kZMs5qt algorithm=PBEWithMD5AndDes
kidsk&klf^rv
Navicat连接blind_date2数据库
4.已知用户在系统中的所有操作都会被记录,请找出用户在“查询角色”时,其请求的后端路径地址为?(格式:/api/query/...) (3分)
/zwz/role/getAllByPage
blind_date数据库中a_log日志
5.请分析得出数据库用户表中status为-1状态值的含义为?(格式:学生) (1分)
禁用
在源码里parameter目录下commonConstant记录了系统基础常量
6.请统计平均月均收入第二高的省份(省份包含三大类:省、直辖市、自治区)(答案格式:请写出完整的省份名(或直辖市名、自治区名),如江西省、天津市、西藏自治区) (3分)
内蒙古自治区
对blind_date2数据库中a_member_st表进行分析
往期内容推荐
2024第四届全国网络空间取证竞赛(FIC)决赛参考writeup