RSA和AES的使用

news2024/11/18 11:40:59

文章目录

        • 为什么要对数据传输加密
        • 对称加密和非对称加密
          • 密钥的几种格式
          • 非对称加密算法----RSA算法
            • 产生公私密钥对
          • 对称加解密算法AES
        • 为什么要结合使用这两种算法
            • 利用RSA来加密传输AES的密钥,用AES来加密数据,思路如下:
            • 特点分析:
        • 参考链接

为什么要对数据传输加密

在开发应用过程中,客户端与服务端经常需要进行数据传输,涉及到重要隐私信息时,为了避免数据泄露和被篡改,开发者自然会想到对数据进行加密,即使传输过程中被“有心人”截取,也不会将信息泄露。

对称加密和非对称加密

密钥的几种格式

1 .DER:是用二进制DER编码

.PEM:是用ASCLL(BASE64)编码

PEM格式就是在DER格式基础上进行BASE64编码

2 .CER:存放公钥,没有私钥

.PFX:存放公钥和私钥

非对称加密算法----RSA算法

在这里插入图片描述

1. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
2. 所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
   简单的说是“公钥加密,私钥解密;私钥加密,公钥解密”。
3.RSA算法支持加密、解密、签名、验签操作。

RSA算法操作与密钥类型关系如下:
在这里插入图片描述

产生公私密钥对

openssl genrsa -out test_priv.pem 2048 //test_pri.pem中既包含了私钥信息也包含了公钥信息
openssl rsa -pubout -in test_priv.pem -out test_pub.pem //从test_pri.pem私钥中提取公钥命令

对称加解密算法AES
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
1. 使用时需要利用AES密钥和初始化向量IV来加解密数据。
2. 解密操作时必须使用相同的AES密钥和IV值,否则解密出来的数据是不正确的

为什么要结合使用这两种算法

1. rsa对秘钥加密是为了防止数据被篡改,而使用AES进行加解密是因为RSA太慢了,所以使用AES进行通信,RSA进行传递秘钥。
2. 数据量不大时直接用RSA就可以
利用RSA来加密传输AES的密钥,用AES来加密数据,思路如下:

1、客户端启动,发送请求到服务端,服务端用RSA算法生成一对公钥和私钥,我们简称为pubkey1,prikey1,将公钥pubkey1返回客户端。

2、客户端拿到服务端返回的公钥pubkey1后,自己用RSA算法生成一对公钥和私钥,我们简称为pubkey2,prikey2,并将公钥pubkey2利用服务端传过来的公钥pubkey1加密,加密后,传输给服务端。

3、此时服务端收到客户端传输的密文,用私钥prikey1进行解密,因为数据pubkey2是用服务端的公钥pubkey2加密的,那么,通过解密就可以得到客户端生成的公钥pubkey2

4、然后服务端自己再生成 对称密钥key,取名为aeskey,也就是我们的AES,其实也就是相对于我们配置中的长度为16没加密key,生成了这个key以后,我们就用客户端的公钥pubkey2进行加密,返回给客户端。因为被pubkey2加密的数据,只能被客户端对应的prikey2解密,所以,客户端拿到密文后,用prikey2进行解密操作,解密完,得到对称加密AES的密钥key,最后密钥key进行数据传输加密,至此,整个流程结束。

特点分析:

1、单纯的使用非对称加密方式RSA的话,效率会很低,因为非对称加密解密方式虽然很保险,但是过程复杂,需要时间长。

2、单纯使用对称加密方式AES的话,太死板,因为这种方式使用的密钥是一个固定的密钥,也就是不能改,一旦客户端或者服务端改的话,就必须通知另一方要改,并且改了后,还需要约定一相同的密钥。使用起来非常不灵活。并且,有一种极端的情况就是,一旦密钥被人获取,那么,我们是无法知道的,我们的所发的每一条数据都会被都对方获取。

but,AES有个很大的优点,那就是加密解密效率很高,而我们传输正文数据时,正号需要这种加解密效率高的;所以这种方式适合用于传输量大的数据内容。

3、基于以上两种特点,所以取其优,就是结合使用;用RSA方式传输AES的密钥,然后客户端和服务端拿到AES的密钥后,再进行传输正式的内容。这样既利用了RSA的灵活性,可以随时改动AES的密钥;又利用了AES的高效性,可以高效传输数据。

参考链接

https://blog.csdn.net/qingzhuyuxian/article/details/119731687
https://blog.csdn.net/mm_520111111/article/details/120379377
*https://www.cnblogs.com/f1194361820/p/4260025.html
http://t.zoukankan.com/jianguo221-p-13030046.html

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

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

相关文章

【探索Spring底层】14.谈谈参数解析器

文章目录1. 参数解析器概述2. 常见参数的解析1. 参数解析器概述 参数解析器是Spring-Web包提供的组件,并且SpringMVC中提供了很多参数解析器。 常见的参数解析器如下 org.springframework.web.method.annotation.RequestParamMethodArgumentResolverabbc908org.s…

部署并启动项目在linux(CentOS7)上,一名合格的程序猿不能不会(ಥ_ಥ)

各位小伙伴大家好呀哈哈哈~ 遇到问题不要慌─≡Σ(((つ•̀ω•́)つ让我先发个朋友圈~( • ̀ω•́ )✧ 我们知道项目的正常运行是需要先部署在服务器上,然后才能正常使用,我们一般都是在idea下写好然后直接部署在tomcat上或者其他服务器,但…

多维表需求管理表自动生成TAPD需求

【实现效果:】业务同学使用多维表管理客户需求,和产品团队经过评审之后,一键把多维表里对应的需求生成TAPD需求/缺陷单 【准备工作】 准备一个多维表,比如维格表、金山轻维表等 可以参考这两个模版: 金山轻维表&am…

【深入浅出Spring原理及实战】「开发实战系列」Aspectj和LoadTimeWeaving的动态代理技术实现指南

前提介绍 当我们聊到Spring框架的项目实际开发中,用的强大的功能之一就是(面向切面编程)的这门AOP技术。如果使用得当,它的最大的作用就是侵入性比较少并且简化我们的工作任务(节省大量的重复性编码)&…

【QT】PySide6 数据可视化折线图

一、项目介绍 本项目将通过PySide6构建一个可以显示数据折线图的可视化程序,其中,数据来源时美国地质调查局(US Geological Survey)上公开的一小时地震震级数据。 可以通过链接进行下载。 二、实现步骤 本项目的实现步骤可以概括为: 读取…

艾美捷过氧化氢酶检测试剂盒的功能和应用

过氧化氢酶(EC 1.11.1.6;2H2O2氧化还原酶)是一种普遍存在于大多数需氧细胞中的抗氧化酶。过氧化氢酶(CAT)参与过氧化氢(H2O2)的解毒,过氧化氢是一种活性氧(ROS&#xff0…

领域首创!合合信息与上海大学联合开启贵州原生态古彝文典籍数字化项目

古彝文传承至今已有数千年历史,是世界上最古老的文字之一。2022年12月21日,合合信息与上海大学社会学院正式签署校企合作协议,双方将合力完成以国家珍贵古籍《西南彝志》为中心的贵州古彝文图像识别及数字化校对项目(简称“古彝文…

搜索与图论---最短路

最短路:建图! 源点—起点汇点—终点约定n为点数,m为边数1单源最短路:求一个点到其他所有点的最短路 1.1所有边权都是正数 (1)朴素的Dijkstra算法(On^2) 例题:Dijkstra求最短路 I 代码: #include<iostream> #include<cstring> #

代码随想录算法训练营第42天 | 01背包问题 416. 分割等和子集

01背包问题 由于leetcode上没原题&#xff0c;故参考卡哥意见自己编题记录一下。 一、题干 背包最大重量为4。物品为&#xff1a; 物品名称重量价值011513202430––– 问背包能背的物品最大价值是多少&#xff1f; 二、解法 二维dp&#xff1a; 递推公式&#xff1a;dp[i…

数组方法中会更改原数组,不会更改原数组(详细)

1.不会改变原来数组的有&#xff1a; concat() 连接两个或更多的数组&#xff0c;并返回结果。 如果arr.concat&#xff08;&#xff09;里面不放数组参数&#xff0c;则会浅拷贝arr 如果参数不是数组&#xff0c;它不会递归到嵌套数组参数中 数据类型如字符串&#xff0c;数…

elasticsearch小白入门

一般再项目中都会用到 搜索&#xff0c;如果直接查询数据库&#xff0c;性能会存在瓶颈。 这时&#xff0c;用ES就很好的解决这个问题。 ES组件很多&#xff1a;包括 elasticsearch kibana beats logstash 安装 elasticsearch 下载&#xff1a; Elasticsearch 7.10.2 | El…

SpringBoot项目搭建+登录功能实现(小结)

项目目录 登录功能实现思路 目录 1.pom.xml添加依赖 2.配置application.yml文件 3.sql映射文件配置---UserMapper.xml 4.导入页面资源 5.Springboot启动类的配置 6.编写全局配置类 config->AppConfig 7.创建实体类--数据表对应 8.修改login.html页面 9.编写UserCo…

基于SpringBoot的SSMP整合案例

基于SpringBoot的SSMP整合案例 简介&#xff1a;SSMP(SpringSpringMVCMyBatis)&#xff0c;通过SpringBoot整合SSMP来完成增删改查案例。 功能开发模块 实体类开发————使用Lombok快速制作实体类Dao开发————整合MyBatisPlus&#xff0c;制作数据层测试Service开发——…

如意如意猿如意

如意如意猿如意什么是猿如意猿如意效率工具JSON编辑器jsontojava开发工具ChatGPT推荐指数评分及改进意见UI界面效率工具和开发工具ChatGPT一行代码总结经常听到一句话&#xff1a;如意如意随我心意&#xff0c;作为程序猿&#xff0c;我也想要一个如意&#xff0c;心中默念咒语…

LeetCode-91-解码方法

1、动态规划法 我们可以使用动态规划法来解决本问题。我们利用数组dp[i]dp[i]dp[i]来记录字符串前iii位能够组成的解码方法总数。在设计状态转移方程时&#xff0c;我们需要注意这样子的特殊情况&#xff1a;1、当s[i]s[i]s[i]不为0时&#xff0c;单独一个s[i]s[i]s[i]肯定能够…

PID算法总结-从公式原理到参数整定解析

目录 一、控制系统 1.1控制系统的分类 1.2 性能指标 二、PID算法的起源及特点 三、PID应用 四、PID公式原理 五、PID源码 六、PID整定方法 6.1 经验法 6.2 衰减曲线法 6.3 响应曲线法 参考文献&#xff1a; 一、控制系统 1.1控制系统的分类 分为开环控制、闭环控制和复…

Axios(二)

1.axios的基本使用 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.…

前端基础_像素的处理

像素的处理 在HTML5中使用canvas API所能够做到的图像处理技术中&#xff0c;还有一个更让人惊讶的技术就是像素处理技术。使用canvas API能够获取图像中的每一个像素&#xff0c;然后得到该像素颜色的rgb值或rgba值。 使用图形上下文对象的getImageData方法来获取图像中的像…

Docker安装Nginx 反向代理服务器

前端代码扔在服务器上怎么运行&#xff0c;首先安装Nginx&#xff0c;这里我用Docker安装Nginx 文章目录一、安装nginx docker镜像1、 获取nginx官方镜像2、查看镜像库3、宿主机创建好要挂载的目录4、启动一个不挂载的容器5、配置文件挂载到宿主机6、停止/删除容器7、查看宿主机…

Kaggle手写识别-卷积神经网络Top6%-代码详解

目录 1. Introduction 简介 2. Data preparation 数据准备 2.1 Load data 加载数据 2.2 Check for null and missing values 检查空值和缺失值 2.3 Normalization 规范化 2.4 Reshape 重塑 2.5 Label encoding 标签编码 2.6 Split training and valdiation set 拆分训…