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=

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

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

相关文章

VSCode 配置 C/C++ 环境

1 安装 VSCode 直接去官网(https://code.visualstudio.com/)下载并安装即可。 2 配置C/C编译环境 方案一 如果是在Windows,需要安装 MingW,可以去官网(https://sourceforge.net/projects/mingw-w64/)下载安装包。 注意安装路径不要出现中文。 打开 w…

Ubuntu-18.04本地化部署Rustdesk服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、配置防火墙二、安装三大件1.下载三大件2.安装三大件 三、安装客户端1.下载客户端1.Windows2.Linux 四、配置客户端连接服务器五、总结 前言 如果你是想数据…

JEECG表格选中状态怎么去掉

官网代码(在取消选中状态的时候不生效) rowSelection() {return {onChange: (selectedRowKeys, selectedRows) > {console.log(selectedRowKeys: ${selectedRowKeys}, selectedRows: , selectedRows);},getCheckboxProps: record > ({props: {disa…

数据结构系列-堆排序

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 昨天我们实现的堆的搭建,我们今天实现以下堆的排序, 堆的排序的最大的优点就是提高的效率,减小了时间复杂度,在这个里面我们有一个…

面试十八、容器适配器

容器适配器是一种特殊类型的容器,它们提供了一种不同于常规容器的接口和行为。容器适配器通常是建立在其他容器之上,通过改变接口或添加限制来满足特定的需求或解决特定的问题。 在 C 中,标准库提供了三种常见的容器适配器: 栈&am…

Web3钱包开发获取测试币-Polygon Mumbai(一)

Web3钱包开发获取测试币-Polygon Mumbai(一) 由于主网区块链上的智能合约需要真正的代币,而部署和使用需要花费真金白银,因此测试网络为 Web3 开发人员提供了一个测试环境,用于部署和测试他们的智能合约,以识别和修复在将智能合约…

边缘渲染是什么意思?属于云渲染吗?

边缘渲染,即利用靠近数据源或用户的边缘计算资源进行渲染,以减少数据传输延迟并提升处理速度。这种方式虽然基于云技术,但更注重数据处理的地理位置优化,与传统的云渲染有所不同。 一、边缘渲染属于什么意思? 边缘渲染是一种基于…

周鸿祎和雷军、马化腾相逢一笑泯恩仇

关注卢松松,会经常给你分享一些我的经验和观点。 马云竟然没有到场,真是遗憾! 前两天工信部和互联网协会联合举办的中国互联网三十周年座谈会上。周鸿祎、雷军、马化腾相逢一笑泯恩仇。 第一条视频: 周鸿祎和马化腾握手言欢&#xff0c…

一道有意思的面试题

面试过程中没有想到合适的数据结构,想了半天,构思没有实践落地。 也是听错了,以为三道题都要做,做出来了两道,这道死活没落地成功。 结果,三道题里面任选一道就行。。。。 好吧 题目:给定一个…

对接浦发银行支付(八)-- 对账接口

一、背景 本文不是要讲述支付服务的对账模块具体怎么做,仅是介绍如何对接浦发银行的对账接口。 也就是说,本文限读取到对账文件的内容,不会进一步去讲述如何与支付平台进行对账。 如果要获取商户的对账单,需要遵循以下步骤&…

【从浅学到熟知Linux】进程间通信之匿名管道方式(进程间通信方式汇总、匿名管道的创建、匿名管道实现进程池详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程间通信介绍如何实现进程间通信进程间通信分类 管道通信方式什么是管道匿名管道pipe匿名管道读写规则管…

PMP®证书适合哪些岗位?哪些人适合报考?

PMP无处不在,不受岗位限制,因为项目管理思维都是相通的,就算你不想从事项目管理工作,也能应用到其他领域内。 当时报考PMP的人群中某些行业和岗位相对而言会多一些,本文就给大家介绍一下哪些行业、岗位的人群适合报考…

echarts折线图默认不显示数据圆点,鼠标划上之后折线图才显示圆点

只需要设置showSymbol为false就可以了,表示只在 tooltip hover 的时候显示。 代码如下: option {tooltip: {trigger: axis},xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [150, 230, 224…

Acrobat Pro DC 2021:强大的PDF编辑软件

Acrobat Pro DC 2021是Adobe公司推出的一款全面而强大的PDF编辑软件,凭借其卓越的性能和丰富的功能,成为了PDF编辑领域的领军者。 Acrobat Pro DC 2021中文激活版下载 这款软件具备全面的PDF编辑功能,包括文本编辑、图片处理、页面组织等&…

单例模式与反射创建对象

单例模式 饿汉式单例模式 单例模式,就是自己先把自己创建了,整个程序都只有这一个实例,别人都没有办法创建实例,因为他的构造方法是private的 一次性把全部都创建了 public class HungryMan {private static int [][] s new …

接口压力测试 jmeter--增强篇(二)

前期准备 1. JMeter的插件的安装 下载Jmeter Plugins Manager对插件进行管理 (1)下载地址:https://jmeter-plugins.org/install/Install/ (2)下载后,将jar包放到jmeter包目录下/lib/ext目录下 &#xff0…

CUDA编程---线程束洗牌指令

从Kepler系列的GPU(计算能力为3.0或更高)开始,洗牌指令(shuffle instruction)作为一种机制被加入其中,只要两个线程在相同的线程束中,那么就允许这两个线程直接读取另一个线程的寄存器。 洗牌指…

清华大学:序列推荐模型稳定性飙升,STDP框架惊艳登场

获取本文论文原文PDF,请公众号留言:论文解读 引言:在线平台推荐系统的挑战与机遇 在线平台已成为我们日常生活中不可或缺的一部分,它们提供了丰富多样的商品和服务。然而,如何为用户推荐感兴趣的项目仍然是一个挑战。…

【笔记】Telephony SIM SPN及运营商名称显示数据来源介绍

来源介绍 网络名称显示 来源及优先级(高到低) SourceCommentEnhanced Operator Name String(Eons) 名称信息存放: EF_PNN(PLMN Network Name, fid: 6FC5) :LAC和EF_PNN中的Record Identifier EF_OPL(Operator PLMN List, fid: 6FC…

67条tips实战案例渗透测试大佬的技巧总结

67条tips实战案例渗透测试大佬的技巧总结。 Tips 1. 手动端口探测 nmap的-sV可以探测出服务版本,但有些情况下必须手动探测去验证 使用Wireshark获取响应包未免大材小用,可通过nc简单判断 eg. 对于8001端口,nc连接上去,随便输…