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

news2024/12/23 14:02:48

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.coloradmin.cn/o/1615182.html

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

相关文章

创新入门|解锁您的潜在市场:探秘付费点击广告(PPC)的秘密武器

在我们的营销领域,按点击付费 (PPC) 广告是增加流量、提高知名度并最终将点击转化为客户的基石策略。这种有针对性的广告模式,即企业只在点击广告时付费,彻底改变了公司投资在线推广的方式。尽管它看起来很简单&#x…

云打印怎么下单?网上云打印下单教程来了!

近些年来,随着移动互联网的发展,云打印也越来越火热。如今有越来越多的用户选择云打印服务。但是现在仍有很多不知道如何下单。那么云打印怎么下单呢?今天小易就来和大家介绍一下网上云打印的下单教程。 云打印怎么下单?网上云打印…

fastgpt、dify功能分析比较

目录 前言 一、dify、fastgpt是什么? 二、同场pk 1.大模型接入 2.chat(最简应用) 3.发布应用 4.知识库 5.workflow 6.其他 三、一些point记录 总结 前言 现在都开始AI应用开发,何谓AI应用,起码要和AI大模型…

CMake 编译项目

一、概述 cmake 是C一个很重要的编译和项目管理工具,我们在git 上以及常见的项目现在多数都是用cmake 管理的,那么我们今天就做一个同时有Opencv和CGAL 以及PCL 的项目。 二、项目管理 重点是CMakeList.txt 1、CMakeList.txt cmake_minimum_requir…

力扣HOT100 - 104. 二叉树的最大深度

解题思路: class Solution {public int maxDepth(TreeNode root) {if (root null) return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;} }

构建云原生湖仓:Apache Iceberg与Amoro的结合实践

随着大数据技术的快速发展,企业对数据的处理和分析需求日益增长。传统的数据仓库已逐渐无法满足现代业务对数据多样性和实时性的要求,这促使了数据湖和数据仓库的融合,即湖仓一体架构的诞生。在云原生技术的推动下,构建云原生湖仓…

C语言——小知识和小细节15

一、二维数组与指针 例一 下面的程序运行结果是什么&#xff1a; #include <stdio.h>int main() {int arr[3][2] { (1,2),(3,4),(5,6) };int* p arr[0];printf("%d\n", *p);return 0; } 运行结果&#xff1a; 实际上这里有个小细节&#xff0c;就是二维数…

《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》【大模型思维链】

目录 前言一、思维链介绍1-1、指令1-2、逻辑依据1-3、示例 二、Cot一般分类2-1、Zero-Shot-CoT2-2、Few-Shot-CoT 三、Cot的好处&缺陷&适用3-1、Cot的好处3-2、Cot的缺陷3-3、Cot的适用 四、变体4-1、自我验证&#xff08;self-consistency checking&#xff09; 总结 …

首发!Llama3纯本地部署攻略!中文方法!

引言 llama3在4月19日刚刚发布&#xff0c;官方的对比结果中在开源模型中堪称世界第一&#xff0c;整好周六日有时间&#xff0c;在魔搭社区上测试一下 一、启动环境 登录魔搭社区&#xff0c;到自己的机器资源&#xff0c;可以看到&#xff0c;可选的机器配置&#xff0c; …

UE5 GAS开发P31 将hud绑定在自己的角色上

在WidgetController内新建一个OverlayAuraWidgetController,然后修改HUD的初始状态 AuraHUD // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/HUD.h" #…

Ubuntu系统下 Nvidia驱动 + cuda驱动 + CuDNN安装与卸载

Ubuntu系统下 Nvidia驱动 cuda驱动 CuDNN安装与卸载 一、NVIDIA驱动与CUDA驱动的区别二、NVIDIA驱动安装与卸载1. 查看系统内核版本2. 查看显卡型号3. 查看是否有显卡驱动4. 禁用nouveau并重启5. 卸载旧版本6. 安装&#xff11;&#xff1a;使用标准Ubuntu仓库进行自动化安装…

四川易点慧电子商务抖音小店:安全正规,购物新选择

在当今互联网高速发展的时代&#xff0c;电子商务已经成为人们日常购物的重要组成部分。四川易点慧电子商务抖音小店作为新兴的电商平台&#xff0c;凭借其安全正规的经营理念和便捷高效的购物体验&#xff0c;正逐渐赢得消费者的信赖和喜爱。 一、平台背景实力雄厚 四川易点慧…

面试十八、容器适配器

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

在PostgreSQL中如何处理大对象(Large Objects),例如存储和检索二进制文件?

文章目录 存储二进制文件为大对象步骤 1&#xff1a;创建一个大对象步骤 2&#xff1a;写入数据到大对象 检索大对象为二进制文件步骤 1&#xff1a;打开大对象以进行读取步骤 2&#xff1a;从大对象读取数据 注意事项 PostgreSQL 提供了对大对象&#xff08;Large Objects&…

JavaSE-15笔记【注解(+2024新)】

文章目录 1.注解概述2.几个常用的JDK内置的注解2.1 Deprecated2.2 Override2.3 SuppressWarnings2.4 FunctionalInterface 3.自定义注解3.1 注解也可以定义属性3.2 注解的使用规则补充 4.元注解4.1 Retention4.2 Target4.3 Documented4.4 Inherited4.5 Repeatable 5.通过反射获…

修改npm源--多种方式

2024年&#xff0c;1月22日 npm.taobao.org 域名证书已到期下线。 重置官方源 npm config set registry https://registry.npmjs.org/ 淘宝源&#xff0c;使用最新版&#xff0c;旧版停止了 npm config set registry https://registry.npmmirror.com 查看当前镜像源 npm …

精心整理的不同操作系统不同实现方案网络安全中的权限提升117种提权手法

精心整理的不同操作系统不同实现方案网络安全中的权限提升117种提权手法。 什么是网络安全中的权限提升&#xff1f; 在网络安全领域&#xff0c;了解威胁至关重要&#xff0c;而最关键的威胁之一就是特权升级的概念。从本质上讲&#xff0c;权限升级是指攻击者获得通常为高级用…

阿斯达年代记怎么下载 阿斯达年代记三强争霸下载教程

阿斯达年代记怎么下载 阿斯达年代记三强争霸下载教程 阿斯达年代记是一款三国争霸类型的游戏&#xff0c;在游戏中大家可以体验到三权争霸的刺激场景&#xff0c;在战场中大家不仅可以体验到体验到文化交织还可以感受到战场的残酷&#xff0c;本期小编将会给大家带来阿斯达年代…

vue-manage-system 版本更新,让开发更加简单

vue-manage-system 近期进行了一次版本升级&#xff0c;主要是支持了更多功能、升级依赖版本和优化样式&#xff0c;并且上线了官方文档网站&#xff0c;大部分功能都有文档或者使用示例&#xff0c;更加适合新手上手开发&#xff0c;只需要根据实际业务简单修改&#xff0c;就…

记录:阿里云服务器网站搭建(3)

Docker安装配置Tomcat 拉取镜像 docker pull tomcat:8启动一个tomcat容器用于拷贝配置文件 docker run -d -p 8080:8080 --name tomcat tomcat:8拷贝容器内tomcat配置文件和日志到本地准备映射 docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat/confdocker cp tomca…