AES和RSA加解密算法学习笔记(实战版)

1. 写在前面

今天整理一篇有关密码学的学习笔记,原因是最近做的一个任务是在网络传输的时候,需要对传输的包进行加密和解密工作,以保证传输过程的安全性。所以,这个过程用到了AES和RSA两个算法。

场景:假设我要给我的老师传送毕设代码和论文, 我已经把代码和论文打成了一个压缩包,我想把这个压缩包通过微信发过去。 但是呢, 我担心这个压缩包传递到微信的时候,被人盗取,导致论文和代码泄露,以防万一, 我需要对压缩包进行加密传输,到了老师那边,让他解密出来,所以设计了这样的一套流程:

  1. 首先,我对压缩包先用AES算法加密,得到压缩包的密文
  2. 其次,我把AES算法的密钥,再通过RSA算法加密, 得到密钥的密文
  3. 我把密钥的密文, 压缩包的密文一块写入到密文压缩包,上传到微信,发给老师,然后我把RSA的私钥发短信发给老师
  4. 老师拿到密文压缩包, 用RSA的私钥,解开压缩包,拿出AES算法的密钥
  5. 再用AES算法的密钥解开论文压缩包的密文,就能看代码和论文了


这个过程中,我就不用担心论文和代码泄露了,因为即使微信上有人获取到了压缩包,也无法破解里面的内容,只是一堆乱码而已,保证了传输过程中的安全性。 如果用图来看的话,大概是一个这样的逻辑:

在这里插入图片描述

这篇文章,主要是想记录下, 如何用代码调相关的加密算法,完成上面的加解密流程, 关于AES和RSA算法的原理本身,不会涉及太多细节,因为AES算法属实复杂,我其实也没看太懂哈哈, 所以只会对这两个算法作简单介绍,知道对称和非对称加密算法,然后知道两个算法的流程,再拿个小例子模拟下流程知道这两个算法在干啥就够了,不用太纠结数学公式的推导啥的。 相比这种公式推导, 我觉得弄明白上面的流程为啥要这么设计,发送方到底是怎么用这两个算法进行加密的, 接收方怎么区分开不同的密文,拿到密钥解密的,这个流程还能应用于什么场景等可能更重要一些。

大纲如下

  • AES与RSA算法小识
  • 流程设计
  • 流程实现

ok, let’s go!

2. AES和RSA算法小识

这里简单介绍下两个非常经典的加密算法AES和RSA, 首先, 先得知道一个事情, 就是对称加密和非对称加密, 两者的核心区别加密和解密用的秘钥是不是同一个

  • 对称加密: 加密和解密用的密钥是相同的, AES是一种对称加密算法
  • 非对称加密:加密和解密用的密钥不同,一般会有公私钥之分, 公钥用来加密, 私钥用来解密。RSA是一种非对称加密算法。

2.1 AES算法

AES(Advanced Encryption Standard), 是一种分组加密的对称加密算法。

原理: AES加密,会把明文分成一组一组的,每组长度相等,每次加密一组数据, 之道加密整个明文。

  • AES标准中, 分组长度是128位
  • AES是按照字节加密, 每个分组是16个字节
  • 密钥的长度可以使用128, 192和256, 密钥长度不同, 推荐加密的轮数不同。

整个加密流程大概是下面的样子:
在这里插入图片描述
具体过程比较复杂,我这里不会全介绍,详情可以看参考里面的第一篇链接, 我这里大概说下过程。

2.1.1 DES加密算法

在介绍AES加密算法前,先简单介绍下DES加密算法, 这是对称密码算法中的分组加密算法。

分组加密是块加密,即把明文划分成固定的字节块,每块加密,然后拼起来。 与流密码对应, 这个是逐字节进行加密

DES算法的密钥长度64位, 其中56位参与运算,其余8位为校验位(8, 16, 25, 32, 40, 48, 56, 64的位置), 示意图如下:
在这里插入图片描述
下面是DES的加密过程:
在这里插入图片描述
解密过程比较复杂, 感兴趣的话看下面文档吧, 这里不整理了。

2.1.2 AES加密算法

为了取代被证明不安全的DES算法而设计,AES算法依然是属于分组加密算法。

明文固定长度为128位, 密钥长度128,192,256都可以。
在这里插入图片描述
过程简单描述一下吧,这个更复杂:
在这里插入图片描述
解密用相同的密钥去作运算进行解密,这里就不介绍了, 可以看下面的第一篇参考文档。

2.2 RSA算法

对称加密算法不好的一点就是两方用的密钥是相同的:

  1. 甲方选择某一种加密规则,对信息进行加密;
  2. 乙方使用同一种规则,对信息进行解密。

那如何保存和传递密钥是一个比较头疼的问题,1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。

这种新的加密模式被称为"非对称加密算法"。

  1. 乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的
  2. 甲方获取乙方的公钥,然后用它对信息加密
  3. 乙方得到加密后的信息,用私钥解密

如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。直到现在,RSA算法一直是最广为使用的"非对称加密算法"。

这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

下面简单看下这个算法的原理。

2.2.1 数学知识

在介绍RSA加密算法过程之前,先普及几个数学知识:

  1. 互为质数:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。

    推论:

    1. 任意两个质数构成互质关系,比如 13 13 13 61 61 61
    2. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如 3 3 3 10 10 10
    3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如 97 97 97 57 57 57
    4. 1和任意一个自然数是都是互质关系,比如 1 1 1 99 99 99
    5. p是大于1的整数,则p和p-1构成互质关系,比如 57 57 57 56 56 56
    6. p是大于1的奇数,则p和p-2构成互质关系,比如 17 17 17 15 15 15
  2. 欧拉函数: 小于 n n n的正整数中与 n n n互质的数的数目, 用 ϕ ( n ) \phi(n) ϕ(n)表示

    推论:

    1. 如果一个数是质数, 则 ϕ ( n ) = n − 1 \phi(n)=n-1 ϕ(n)=n1 (质数只有和1有公约数,所以一个数如果是质数, 与比他小的除了1之外的所有数都互质)
    2. 如果 n n n可以分解成 2 2 2个互质整数之积, 则 ϕ ( n ) = ϕ ( p ) ∗ ϕ ( q ) = ( p − 1 ) ∗ ( q − 1 ) \phi(n)=\phi(p) * \phi(q)=(p-1)*(q-1) ϕ(n)=ϕ(p)ϕ(q)=(p1)(q1)
  3. 模反元素:如果两个正整数 e e e ϕ ( n ) \phi(n) ϕ(n)互质, 一定可以找到一个整数 d d d,使得 e d − 1 ed-1 ed1 ϕ ( n ) \phi(n) ϕ(n)整除,此时 d d d e e e的模反元素。即 e d − 1 = k ϕ ( n ) , e d m o d    ϕ ( n ) = 1 ed-1=k\phi(n),ed \mod \phi(n)=1 ed1=

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Giants Planet 宣布推出符文,建立在坚实价值的基础上

这是一项旨在释放我们不断发展的生态系统全部潜力的新功能。符文提供了一种更简单的方法来创建通证,这些通证可以从比特币区块链的安全性和去中心化中获益。 符文:建立在坚实的基础上 可以将比特币视为存储贵重物品的安全保险库。 符文就像保险库中的特…

Idea:阿里巴巴Java编码插件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、Alibaba Java Coding Guidelines插件介绍 二、使用步骤 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、Alibaba Java Coding …

微软如何打造数字零售力航母系列科普02 --- 微软低代码应用平台加速企业创新 - 解放企业数字零售力

微软低代码应用平台推动企业创新- 解放企业数字零售力 微软在2023年GARTNER发布的魔力象限图中处于头部领先(leader)地位。 其LCAP产品是Microsoft Power Apps,扩展了AI Builder、Dataverse、Power Automate和Power Pages,这些都包…

计算机网络实验——学习记录五(TCP协议2)

一、TCP协议重传机制 TCP协议是一种面向连接、可靠的传输层协议。为了保证数据的可靠传输,TCP采用数据包重传的机制来应对网络传输过程中可能出现的丢包、错包和乱序等问题。 TCP协议的重传包括超时重传、快速重传、带选择确认SACK的重传和重复SACK重传四种。 二、…

基于JavaWeb手工艺品购物系统的设计与实现

1、系统演示视频(演示视频) 2、需要请联系

实现游戏地图读取与射击运行

射击代码来源自2D 横向对抗射击游戏(by STF) - CodeBus 地图读取改装自 瓦片地图编辑器 解决边界检测,实现使用不同像素窗口也能移动不闪退-CSDN博客 // 程序:2D RPG 地图编辑器改游戏读取器 // 作者:民用级脑的研发…

HarmonyOS ArkUI实战开发-网页加载(Web)

移动应用开发中,网页使用的场景非常多,比如在APP内安排一个优惠活动啥的,就可以直接加载一个H5页面高效并且及时,也省去了使用原生开发要升级版本的麻烦,ArkUI开发框架提供了 Web 组件来加载一个网页,本节笔…

音频文件太大了怎么办?如何实现音乐内存压缩?超实用的音频压缩技巧分享给你

一,我们需要了解音乐文件是如何存储的。 音乐文件通常以数字格式存储,如 MP3、WAV、FLAC等。这些格式各有优缺点,但共同点是它们都需要占用一定的存储空间。文件大小取决于多个因素,包括音频质量、编码格式和采样率等。因此&…

网盘_游戏_博客自动化部署(Nginx多项目部署)

目录 一.前提介绍 二.环境介绍 三.自述(脚本) 四.关于Nginx多项目部署 一.前提介绍 在我之前的博客里详细介绍了上述项目的部署,那么如何使用简单脚本自动部署和使用Nginx多项目部署是本文来介绍的基础篇章。 二.环境介绍 CentOS Linux…

线性表的顺序存储如何设计实现?

如何存储 顺序及链式实现 计算机中的状态

springboot的开发流程

文章目录 springboot的开发流程 1.创建maven项目2.引用依赖 1)起步依赖2)项目依赖3.启动类4.配置文件5.业务代码 1)dto2)controller6.restful测试7.部署 1)打包2)部署 springboot的开发流程 1.创建maven项目 新建maven项目 配置…

键盘打字练习游戏代码

效果图 部分代码 index.html <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1.0" /> <meta http-equiv"…

编程新手必看,Python3中File(文件) 方法知识点及语法学习总结(24)

**介绍&#xff1a; Python3 中的file对象提供了多种方法来操作文件&#xff0c;以下是一些常用的文件方法&#xff1a; close()&#xff1a;关闭一个已打开的文件。这是释放文件资源的重要步骤&#xff0c;通常在文件操作完成后调用。flush()&#xff1a;刷新文件的缓冲区&am…

vos3000外呼系统客户端无法安装如何解决?

如果 VOS3000 外呼系统客户端无法安装&#xff0c;可以尝试以下解决方法&#xff1a; 检查系统要求&#xff1a; 确保你的计算机满足 VOS3000 外呼系统客户端的系统要求&#xff0c;包括操作系统版本、内存、处理器等。如果系统不符合要求&#xff0c;可能会导致安装失败或者运…

AI生图美学在淘宝的实践应用

本文介绍了如何制定和应用美学标准来评估和改善人工智能生成的图像质量&#xff0c;特别是在电商领域的应用&#xff0c;主要分为制定美学标准、训练美学模型、应用美学模型、升级淘宝风格模型四个步骤。 美学的定义与分析 图像质量标准&#xff1a;现代设计框架下&#xff0c;…

《自动机理论、语言和计算导论》阅读笔记:p261-p314

《自动机理论、语言和计算导论》学习第 10 天&#xff0c;p261-p314总结&#xff0c;总计 48 页。 一、技术总结 1.generating & reachable 2.Chomsky Normal Form(CNF) 乔姆斯基范式。 3.pumping lemma 泵作用引理。引理&#xff1a;引理是数学中为了取得某个更好的…

JAVA基础之垃圾收集器

一 JVM垃圾收集 分代收集思想 当前虚拟机的垃圾收集一般采用分代收集算法&#xff0c;这种算法本身没有创新性&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆内存分为新生代和老年代&#xff0c;这样我们就可以根据不同年龄到的特点选择不同的垃圾收集…

试用花生壳软件,实现外网访问内网web服务器

试用花生壳软件&#xff0c;实现外网访问内网web服务器。今天查看了一下家用的WiFi路由器和光猫。在wifi路由器里看到了DDNS&#xff0c;看到了花生壳。这时想到了花生壳软件能实现外网访问内网web服务器的功能。于是试用了一下。 先游览了贝锐花生壳公司网站&#xff0c;了解…

落地灯几瓦合适?落地护眼灯推荐

不少人选择在客厅中摆放落地灯的时候&#xff0c;都不知道客厅落地灯多少瓦合适&#xff0c;接下来小编为大家整理了有关客厅落地灯多少瓦合适的相关内容&#xff0c;顺便分享一下落地灯应该怎么选&#xff0c;以及推荐五款落地护眼灯&#xff0c;供大家在选择的时候参考。 灯光…

如何使用ChatGPT仿写一篇学术论文

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 目录 1.仿写的目的 2.根据专业方向搜集合适的文献 3.总结想要仿写的文献 4.使用ChatGPT一步一步仿写 5.书籍介绍 AIPaperPass智能论文写作平台 深入地阅读和分析你研究领域的相关文…