全文目录,一步到位
- 1.前言简介
- 1.1 专栏传送门
- 1.1.2 上文传送门
- 2. 使用方式
- 2.1 使用druid自带的RSA加密工具
- 2.1.1 引入druid依赖
- 2.1.2 原yml配置(对比使用)
- 2.1.2 新yml配置
- 2.2 springboot的redis配置类
- 2.2.1 例如在RedisConfig中
- 2.2.2 设置序列化与反序列化代码
- 示例如下:
- 2.3 如何加密与解密 `(方法一)`
- 2.3.1 生成公钥和私钥
- 2.3.2 用私钥加密后的密文
- 2.3.2 使用公钥+密文 解密
- 2.4 如何加密与解密 `(方法二)`
- 2.4.1 使用jar包
- 2.4.2 druid包如图所示
- 3. 文章的总结与预告
- 3.1 本文总结
- 3.2 下文预告
1.前言简介
单体项目中 账号密码会存在yml中 明文显示
例如mysql和redis
下面做redis的加密与解密方式 使用RSA
本篇不对RSA进行解释
详细请看上篇
1.1 专栏传送门
传送门: => 数据安全等功能
1.1.2 上文传送门
传送门: => AES对称性加密
传送门: => RSA非对称性加密01: 加密mysql的连接密码
2. 使用方式
使用druid的包进行加密解密
正好数据库连接池也是用druid
2.1 使用druid自带的RSA加密工具
这里的RSA加密是 私钥加密 公钥解密
2.1.1 引入druid依赖
版本是:
<druid.version>1.2.20</druid.version>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
2.1.2 原yml配置(对比使用)
填写
redis的ip
和密码
spring:
# redis 配置
redis:
# 地址
host: 192.168.1.29
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码(没有就是空)
password: 123456
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 2
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
2.1.2 新yml配置
增加公钥和加密后的密码
spring:
# redis 配置
redis:
# 地址
host: 192.168.1.29
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码(没有就是空)
password: KsqtvETTXHr7g4/q6IXbv+hV5m0qjRs6Wwh7G02oME4n3FTqel7i3LC21ucgbG6Tkb+5A4a7i389czFAdA10aw==
#公钥(RSA加密) 没有就是空)
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK5K0z+lnnDyrCB6xTTx9ltRoi8lrTuHoStsLZzyMsmtEn0h9TwmZ+aPHlQQMrfRKgoSdyCBTKA57b4KzpNIJysCAwEAAQ==
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 2
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
2.2 springboot的redis配置类
2.2.1 例如在RedisConfig中
(配置
序列化与反序列化
位置相同的地方 增加以下代码)
private final Environment environment;
public RedisConfig(Environment environment) {
this.environment = environment;
}
@Bean
public RedisConnectionFactory myLettuceConnectionFactory() throws Exception {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(Objects.requireNonNull(environment.getProperty("spring.redis.host")), Integer.parseInt(Objects.requireNonNull(environment.getProperty("spring.redis.port"))));
redisStandaloneConfiguration.setDatabase(Integer.parseInt(Objects.requireNonNull(environment.getProperty("spring.redis.database"))));
//获取application.yml 中的密码(密文)
String publicPassword = environment.getProperty("spring.redis.password");
String publicKey = environment.getProperty("spring.redis.publicKey");
if (StringUtils.isNotBlank(publicPassword) && StringUtils.isNotBlank(publicKey)) {
String realPassword = ConfigTools.decrypt(publicKey, publicPassword);
//解密密码并set到配置中
redisStandaloneConfiguration.setPassword(realPassword);
}
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
2.2.2 设置序列化与反序列化代码
传送门: => 配置redis的序列化与反序列化方式(收录两种)
示例如下:
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
// Hash的key也采用StringRedisSerializer的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
2.3 如何加密与解密 (方法一)
2.3.1 生成公钥和私钥
genKeyPair
String[] keyPair = ConfigTools.genKeyPair(512);
//私钥
String privateKey = keyPair[0];
//公钥
String publicKey = keyPair[1];
2.3.2 用私钥加密后的密文
encrypt
String password = ConfigTools.encrypt(privateKey, password);
System.out.println("privateKey:" + privateKey);
System.out.println("publicKey:" + publicKey);
System.out.println("password:" + password);
2.3.2 使用公钥+密文 解密
String decryptPassword = ConfigTools.decrypt(publicKey, password);
System.out.println("解密后:" + decryptPassword);
2.4 如何加密与解密 (方法二)
2.4.1 使用jar包
进入maven的仓库, druid包下 运行java指令
最后 加 > pzy.txt 表示输出到 pzy.txt文档中
java -cp druid-1.2.20.jar com.alibaba.druid.filter.config.ConfigTools 密码
如图所示
2.4.2 druid包如图所示
3. 文章的总结与预告
3.1 本文总结
- redis密码使用RAS进行加密解密
- 密码如果是空 则yml对应位置不填即可 代码内
判断空
的情况了
3.2 下文预告
使用druid对数据库密码进行加密解密, 以及druid的部分配置解释
@author: pingzhuyan
@description: ok
@year: 2024