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

news2025/2/23 11:34:58

全文目录,一步到位

  • 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
        # 端口,默认为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初始redis:Zset有序集合

Set作为集合&#xff0c;有两个特点&#xff1a;唯一且无序。 Zset是有序集合&#xff0c;在保证唯一的情况下&#xff0c;是根据什么来排序的呢&#xff1f;排序的规则是什么&#xff1f; Zset中的member引入了一个属性&#xff0c;分数&#xff08;score&#xff09;&#…

写SCI能用上的AI论文写作工具!码住!

01 Quillbot 提供改写、语法检查、抄袭检测、摘要生成、引文生成等功能。它可以在各种喜欢的网站上使用&#xff0c;帮助用户轻松提高写作效率和质量。 02梅子AI论文 1智能AI论文神器-查重率10%左右-参考文献致谢模板查重报告一键打包 无限免费生成千字论文大纲-在线快速生成…

智慧园区可视化:智能管理与高效运营的未来

图扑 GIS 智慧园区可视化系统整合地理信息和数据分析&#xff0c;实现全方位智能管理&#xff0c;优化资源调度&#xff0c;提高运营效率&#xff0c;保障园区安全和用户满意度。

数据结构【链试结构二叉树】

&#x1f31f;个人主页&#xff1a;落叶 目录 ​编辑 实现链式结构⼆叉树 前中后序遍历&#xff1a; 遍历规则 代码实现 前序遍历&#xff1a; 中序遍历&#xff1a; 后序遍历&#xff1a; 图解遍历&#xff1a; 函数递归栈帧图&#xff1a; 结点个数以及高度等 【⼆…

【生日视频制作】教师节中秋节国庆节奔驰大G汽车车身AE模板修改文字软件生成器教程特效素材【AE模板】

奔驰大G汽车身生日视频制作教程AE模板修改字软件生成器素材 怎么如何做的【生日视频制作】教师节中秋节国庆节奔驰大G汽车车身AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频…

iOS工程:获取手机相册权限,iOS原生系统弹窗, Privacy隐私政策选择,如何添加系统弹出并修改描述文字

【iOS工程】获取手机相册权限&#xff0c;iOS原生系统弹窗, Privacy隐私政策选择&#xff0c;如何添加系统弹出并修改描述文字 设备/引擎&#xff1a;Mac&#xff08;11.6&#xff09;/Mac Mini 开发工具&#xff1a;Xcode&#xff08;15.0.1&#xff09; 开发需求&#xff…

maven Tomcat插件安装 运行web项目 (3)

1.maven工程目录结构 main是用来写我们程序 test是用来测试 java是源程序 resource是配置 maven项目构建命令 2.配置maven 创建Maven工程 这里的项目名称可以随便取 进来后改成自己想要的jdk

天津市2024年成人高考报名须知

&#x1f6a7;天津市2024年成人高考报名须知 &#x1f32b;2024年天津市成人高校招生考试报名。符合天津市报名条件的在职从人员和社会其他人员&#xff0c;可报名参加全国各类成人高等学校招生统一考试。考生须在规定时间完成报名&#xff0c;逾期不再补报。 &#x1f32b;网上…

微服务事务管理

1.分布式事务问题 1.1.本地事务 本地事务&#xff0c;也就是传统的单机事务&#xff0c;在传统数据库事务中&#xff0c;必须要满⾜四个原则&#xff1a; 1.2.分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产⽣的事务&#xff0c;例…

使用itextpdf5.x将网页转为PDF,并添页眉页脚页码

一、用到的Maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency><!-- 中文字体支持 --><dependency><groupId>com.itextpdf…

Gameplay Ability System(通过表配置不同等级的伤害)

一、创建配置表 1、创建Excel表格&#xff0c;输入数据&#xff0c;表示1级的普攻伤害为5&#xff1b;2级的普攻伤害为15。 2、另存为.csv格式文件。 3、当然也可以通过记事本直接写成下图这样。 二、导入UE5处理 1、导入为CurveTable的稳定格式&#xff0c;命名为CT_MeleeA…

探索厦门凯酷全科技有限公司抖音小店的实用魅力

在数字化浪潮汹涌的今天&#xff0c;电商平台如雨后春笋般涌现&#xff0c;而抖音作为短视频与电商融合的佼佼者&#xff0c;更是为众多企业开辟了新的营销与销售渠道。厦门凯酷全科技有限公司&#xff0c;作为这股潮流中的一股清流&#xff0c;凭借其独特的产品定位与创新的营…

【网络】传输层协议——UDP协议

1.传输层协议 首先我们要明白&#xff0c;进入传输层&#xff0c;也就进入了操作系统内核。 因为应用层下面这几个就是操作系统内部 我们学传输层及其以下几层&#xff0c;也就是在学操作系统内核的网络模块。 1.1.传输层协议 传输层能够实现端到端的连接。比如说我们用QQ与…

嵌入式开发实训室解决方案

随着物联网、智能制造、汽车电子等技术的飞速发展&#xff0c;嵌入式系统作为这些领域的核心技术之一&#xff0c;其重要性日益凸显。为了满足职业院对嵌入式开发人才的需求&#xff0c;构建一个高效、全面的嵌入式开发实训室显得尤为重要。本文旨在提出一套综合性的嵌入式开发…

监控软件可以看到员工在干什么吗?逆天功能!

企业对于工作效率和信息安全重视程度的不断提升&#xff0c;监控软件作为管理工具之一&#xff0c;逐渐在各大公司中普及开来。 这些软件旨在通过监控员工电脑活动、网络通信、甚至物理环境等&#xff0c;来帮助管理者更好地了解员工工作状态&#xff0c;防止数据泄露&#xf…

JVM系列--运行时数据区

Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。《Java虚拟机规范》中规定了每一部分的作用。 1 程序计数器 程序计数器&#xff08;Program Counter Register&#xff09;也叫PC寄存器&#xff0c;每个线程会通过程序计数器记录当前要执行的…

基于单片机的教室人数自动统计系统设计

摘 要&#xff1a; 以单片机 AT89C51 为核心&#xff0c;采用光电感应器和单片机系统的技术测量控制装置&#xff0c;同时利用红外装置采集信息&#xff0c;并将信号进行放大形成对应的高电平信号通过LED 显示反馈人数&#xff0c;从而达到管理的目的。文中对基于单片机的教室人…

【SQL】指定日期的产品价格

目录 题目 分析 代码 题目 产品数据表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_price | int | | change_date | date | ------------------------ (product_id, chang…

基于cubemx的STM32的freertos的串口通信

1、任务描述 使用freertos系统实现电脑调试助手和正点原子开发板STM32F103ZET6的串口通信。 2、cubemx设置 3、程序代码 &#xff08;1&#xff09;添加usart1.c #include "usart1.h"#include "usart.h"/**********重定义函数**********/struct __FILE …

Chat App 项目之解析(八)

Chat App 项目介绍与解析&#xff08;一&#xff09;-CSDN博客文章浏览阅读340次&#xff0c;点赞7次&#xff0c;收藏3次。Chat App 是一个实时聊天应用程序&#xff0c;旨在为用户提供一个简单、直观的聊天平台。该应用程序不仅支持普通用户的注册和登录&#xff0c;还提供了…