RSA非对称性加密02: 加密redis的连接密码(下)

2024-08-25 08:20

本文主要是介绍RSA非对称性加密02: 加密redis的连接密码(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全文目录,一步到位

  • 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加密工具

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# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码(没有就是空)password: 123456# 连接超时时间timeout: 10slettuce: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# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码(没有就是空)password: KsqtvETTXHr7g4/q6IXbv+hV5m0qjRs6Wwh7G02oME4n3FTqel7i3LC21ucgbG6Tkb+5A4a7i389czFAdA10aw==#公钥(RSA加密) 没有就是空)publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK5K0z+lnnDyrCB6xTTx9ltRoi8lrTuHoStsLZzyMsmtEn0h9TwmZ+aPHlQQMrfRKgoSdyCBTKA57b4KzpNIJysCAwEAAQ==# 连接超时时间timeout: 10slettuce: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;}@Beanpublic 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的序列化与反序列化方式(收录两种)

示例如下:
  	@Beanpublic 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

这篇关于RSA非对称性加密02: 加密redis的连接密码(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105034

相关文章

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L