RSA非对称性加密02: 加密redis的连接密码(下)-私钥加密,公钥解密

news2024/9/20 10:46:34

全文目录,一步到位

  • 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

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

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

相关文章

Golang小项目(1)

Golang小项目(1) 前言 本项目适合Golang初学者,通过简单的项目实践来加深对Golang的基本语法和Web开发的理解。 建议前往 torna.top 查阅效果更佳 项目结构 . ├── main.go └── static├── form.html└── index.html项目流程图 定义三个路由: /:首页,显示static…

SWOT分析:解锁个人优势,规划未来成功路径

在传统的SWOT分析中&#xff0c;人们常常采用手工绘制的方式来创建图表&#xff0c;这种方式不仅过程繁琐&#xff0c;而且耗费大量时间和精力。为了简化这一流程&#xff0c;本文推荐使用可免费使用的实时在线编辑工具——即时白板&#xff0c;它是一款高效便捷的SWOT分析工具…

照片清晰度修复,这里总结了三种方法

照片清晰度修复&#xff0c;在数字化时代&#xff0c;照片不仅记录着生活的点滴&#xff0c;更承载着我们的情感和回忆。如今&#xff0c;有许多珍贵的老照片逐渐失去了原有的清晰度&#xff0c;变得模糊不堪。但随着科技的发展&#xff0c;我们有了多种方法来修复这些模糊的照…

专利检索的重要性

专利检索的重要性

从零开学C++:string类

引言&#xff1a;现在我们将正式踏入C起飞阶段&#xff0c;C语言自带的各种类能极大地简化我们所编写的代码的量&#xff0c;而我们今天要学的string就是其中之一。 更多有关C的知识点详解可前往个人主页&#xff1a;计信猫​​​​​ 一&#xff0c;认识string string其实很简…

zoom 会议 javascript 转录例子

一、启动server-to-server zoom api服务&#xff0c;用于创建会议&#xff0c;参考&#xff1a;如何使用Zoom API创建一个会议&#xff1f;-CSDN博客 二、启动meetingsdk-auth-endpoint服务&#xff0c;用于加入会议&#xff0c;参考&#xff1a;zoom 会议机器人web例子-CSDN博…

前端问答:如何在HTML中插入度数符号?

在前端开发中&#xff0c;你可能经常需要在网页中显示温度、角度或地理坐标&#xff0c;这时就需要用到度数符号&#xff08;&#xff09;。那么&#xff0c;如何在HTML中正确地插入这个符号呢&#xff1f;今天&#xff0c;我来手把手教你三种简单又实用的方法&#xff0c;让你…

怎么压缩图片大小?7款实用图片压缩免费软件大公开,赶紧收藏试试!

电脑怎么压缩图片大小&#xff1f;您是否也正在寻找一种方法&#xff0c;可以在不损失质量的情况下压缩图片&#xff1f;在我们的日常生活中&#xff0c;图片记录着无数美好瞬间&#xff0c;已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是个人使用还是专业需求。随…

解决TESSY导入测试用例后出现提示接口有改变的问题

Tessy支持测试用例的导入&#xff0c;不懂测试用例怎么导入&#xff0c;可以看这一篇文章&#xff1a; TESSY导入导出测试用例-CSDN博客 当成功的导入测试用例到工程后&#xff0c;在TIE中查看了用例的源码和头文件路径都没有问题后&#xff0c;就可以执行分析&#xff1a; 但是…

分享一个基于Python的广东热门旅游数据可视化分析系统flask毕设(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

ESP Friends 技术沙龙报名开启|带您掌握高效 GUI 开发

乐鑫 ESP32 系列 SoC 凭借其功能多样、高性价比、封装友好、资源丰富等优势&#xff0c;已成为全球开发者在需要屏幕显示的泛 IoT 应用里作为项目开发的首选平台。 乐鑫信息科技 (688018.SH) 即将举办 ESP Friends 线下技术沙龙。我们将带您深入探索 ESP32-C2 在小尺寸 LCD (0…

【源码】IMX6uLL与QT的串口通信

文章目录 [TOC](文章目录) 前言1、QT编写串口2、编译3、加载触摸屏驱动4、硬件接线5、运行可执行程序6、结果 前言 仓库&#xff1a;https://gitee.com/wangyoujie11/im6u-ll-qt-seriral 1、QT编写串口 2、编译 编译将生成的可执行文件&#xff1a;QtSerial放在板子上【这里…

计算机辅助编码

计算机辅助编码&#xff08;Computer Assisted Coding, CAC&#xff09; 背景 在医疗行业中 Coding 是一个细分行业&#xff0c;从业人员在国外有专门的 培训 开始 资格认证。在国内也有医疗编码员考试。主要工作就是根据病人的信息、病案 给出医疗编码&#xff08;ICD、CPT&…

React学习day03-components插件安装(仅基于火狐浏览器)、受控表单绑定、在React中获取dom、组件通信(组件间的数据传递)

7、components插件安装&#xff08;仅基于火狐浏览器&#xff09; &#xff08;1&#xff09;点击“打开应用程序菜单” &#xff08;2&#xff09;点击“扩展和主题” &#xff08;3&#xff09;在“扩展”的“寻找更多组件”搜索“Components”&#xff0c;找到“React Deve…

Leetcode 46. 全排列 排列型回溯 C++实现

Leetcode 46. 全排列 问题&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以按任意顺序返回答案。 算法&#xff1a; 创建二维返回数组 ans &#xff0c;和临时数组 path &#xff0c;on_path 。 进入 dfs 函数&#xff0c;当 in …

xshell 终端选中文本后自动执行ctrl+c

1. 退出钉钉后&#xff0c;解决问题&#xff0c; xshell终端可以正常使用了。 2. 修改钉钉设置来解决问题&#xff1a; 设置-> 通用-> AI助理 &#xff0c; 取消指定选项。

89.游戏安全项目-htdSdk安装

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;88.游戏改造-UI修正保存到可执行文件 文件名为&#xff1a;黑兔sdk.zip 链接&#xff1…

Linux下UDP编程

一.概念介绍 1.socket 是什么&#xff1f; socket&#xff08;套接字&#xff09;本质上是一个抽象的概念&#xff0c;它是一组用于网络通信的 API&#xff0c;提供了一种统一的接口&#xff0c;使得应用程序可以通过网络进行通信。在不同的操作系统中&#xff0c;socket 的实…

Cobalt Strike 4.8 用户指南-第四节-监听器和基础设施管理

4.1、概述 任何行动的第一步都是建立基础设施。在 Cobalt Strike 中&#xff0c;基础设施由一台或多台团队服务器、重定向器以及指向团队服务器和重定向器的 DNS 记录组成。一旦团队服务器启动并运行&#xff0c;你将需要连接到它&#xff0c;并将其配置为接收来自受感染系统的…

呼叫中心系统数据分析报表统计

呼叫中心系统在客服职场中具有非常重要的作用&#xff0c;可以说如果呼叫中心系统瘫痪整个客服职场都无法工作。呼叫中心的数据统计分析功能对于企业来说也是非常重要的&#xff0c;能够快速帮助企业生成各种数据报表。 呼叫中心系统数据分析统计功能包括&#xff1a;工作量统计…