浅析RSA非对称加密算法

目录

引言

凯撒密码

对称加密

非对称加密

​编辑总结


引言

几月前在知乎上看到一个关于RSA公钥与私钥加解密的提问甚感兴趣,却一直没有时间去探究,今日浅得闲时以文记之。

在文章正式开始之前先讲一个小故事,在公元前58年时,凯撒带领他的军队征战四方,由于当时的通信手段远不及现代这样迅速便捷,书信甚至口头传文便是司空见惯的事情,即使在军队中也不例外。而这种方式带来的问题便是如何保证信息不泄露呢?对于当时的军队而言协同作战时信息泄露是非常可怕的事情,因此凯撒研究出了一种适用于当初场景下安全传输的方法,从而带领军队大获全胜。到底是什么样的方法使得凯撒在那个时期所向披靡呢?再往下看便会知道答案。

凯撒密码

引言中提到的便是著名的凯撒加密,凯撒加密的原理如下,通过使用字母表和一个偏移量v(密钥),从而实现对明文信息的加密。需要注意的是这里的字母是循环的,即Z右移3位后便是C,以此类推。

举个简单的例子,如下为26个字母组成的明文字母表,与之对应的便是通过移位3次后获取到的密文。

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

根据上述规则,很快我们可以知道如下密文:

KHOOR,ZRUOG!

对应的原文便是:

HELLO,WORLD!

虽然凯撒密码在目前来看已经不具备任何的安全性,无法保护信息载体,但在其被应用的那个时代却是非常重要的存在,作为古典密码的代表之一,为后来的密码体系奠定了基础。除此之外,凯撒密码也可看做最为简单的对称加密算法

对称加密

上一部分中提到了凯撒加密可以作为一个最为简单的加密算法,其原因是因为对称加密算法加密和解密使用了同样的密钥,与凯撒密码中的偏移量有异曲同工之妙。

对称加密算法的图示如下:

如图所示,对于通信双方A和B将使用同一个密钥来进行加密与解密,将明文数据通过密钥和加密算法结合后产生密文发送给B,B接收后通过相同密钥解出明文。

不难看出对称加密的特点是双方共用一个密钥,并且其加解密速度快,但与之而来的问题便是如果密钥Key泄露将导致通信双方的数据不再安全

目前市面上较为主流的对称加密算法为AES,其除需要密钥Key外还需要使用一个偏移量iv,并且提供了多种的数据填充模式,本文不做过多赘述。

非对称加密

在了解了对称加密后,终于可以请出我们的今天的主角——非对称加密,相比于上述提到的对称加密,非对称加密的特点是加解密一对密钥对,准确来说一般我们都使用的是公钥加密,私钥解密。而由于大整数因式分解在目前难以实现,因此RSA的安全性较高,但相比于对称加密其效率较低。

这里提到的公钥和私钥是指在使用非对称加密算法情况下生成的密钥对,私钥一般均保存给自己所持有,公钥则可以给任何人,因为使用公钥加密后的密文只有私钥才能解,因此即使当密文被拦截时,攻击者由于没有私钥将无法解密从而获取内容。

因此当A与B想要进行通信时,可以通过B发送的公钥对消息进行加密,而B在收到消息后可以通过自己的私钥实现消息解密查看。

当然也有存在“私钥签名,公钥验签”这种说法,其依赖于消息摘要算法为基础以实现。

回到文章开头的问题,一般来讲为“公钥加密,私钥解密”,事实上私钥也可加密,但一般来说并不会这样做,由于私钥可以推出公钥使其安全性尽失,并且私钥泄露也使加密失去了意义。

因此实际中使用RSA来加密通信信息时,事实上是通信双方各自生成了一对密钥对,双方通过交换公钥进而实现进一步通信。


总结

虽然RSA非对称加密算法提供了较高的安全性,但其性能却有所降低。本文所述以上场景为可信网络条件下,即不考虑诸如中间人攻击、公钥交换失败的情况,对于解决信息防篡改则需要引入消息摘要算法、数字签名作以辅助以确保数据的准确性和可靠性。

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

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

相关文章

OpenAI GPT5计划泄露

OpenAI的首席执行官萨姆奥特曼在最近接受《金融时报》的专访时,分享了OpenAI未来发展的一些新动向。此外,他还透露了关于即将到来的GPT-5模型以及公司对AGI的长期目标的一些细节。 奥特曼指出: 1.OpenAI正在开发GPT-5,一种更先进的…

原理Redis-ZipList

ZipList 1) ZipList的组成2) ZipList的连锁更新问题3) 总结 1) ZipList的组成 ZipList 是一种特殊的“双端链表” ,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作, 并且该操作的时间复杂度为 O(1)。 ZipListEntry: ZipList 中的Entry并不像…

怎么在echarts图上左右滑动切换数据区间

说在前面 不管前端还是后端,大家或多或少都了解使用过echarts图表吧,很多时候我们只是需要展示指定区间的数据,但有时我们希望在图表上能够轻松地切换数据的展示区间,以便更清晰地观察特定时间段或区域的变化。在本文中&#xff0…

贪吃蛇游戏制作

首先在ecilsp里面创建两个包,启动和图形界面 在创建一个文件夹用来放图片 1.绘制图形界面 package com.snaketuxing.view;import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import …

win10蓝屏重启故障修复经验分享

1. 安全模式:尝试进入安全模式,按住Shift键并同时点击“重新启动”选项。然后选择“故障排除”>“高级选项”>“启动设置”>“重新启动”。在启动设置页面,按下F4或按4键选择进入安全模式,观察是否仍然出现蓝屏重启问题。…

cmake+OpenCV4.8.0+contrib4.8.0+cuda 12.2编译踩坑

cmakeOpenCV4.8.0contrib4.8.0cuda 12.2编译踩坑 准备工具 cmake (去官网下载)OpenCV 我下载的是官网发布最新的稳定版本对应的源码,官网目前是4.8.0,github下一个(连不上的可以网上找找资源或者科学上网&#xff09…

听GPT 讲Rust源代码--src/bootstrap

图片来自 使用rust的image库进行图片压缩[1] File: rust/src/bootstrap/build.rs 在Rust源代码中,rust/src/bootstrap/build.rs这个文件是一个构建脚本。构建脚本是一个在编译Rust编译器本身时运行的程序,它用于初始化和配置Rust编译器的构建过程。build…

基于SSM的焦作旅游协会管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

ES6有何新特性?(下篇)

目录 函数参数的默认值设置 rest参数 扩展运算符 Symbol 迭代器 生成器 Promise Class 数值扩展 对象方法扩展 模块化 大家好呀!今天这篇文章继续为大家介绍ES6的新特性,上上上篇文章介绍了一部分,这篇文章会将剩下的部分新增的特…

虚拟化逻辑架构: 创建KVM中的VM与实现VNC远程登录

目录 一、实验 1.安装KVM环境管理工具并创建VM(虚拟机) 2.Windows使用VNC Viewer连接KVM中的VM(虚拟机) 二、问题 1.如何下载安装VNC Viewer 一、实验 1.安装KVM环境管理工具并创建VM(虚拟机) (1) 采…

德迅云安全和您聊聊关于DDOS高防ip的一些方面

德迅DDoS防护服务是以省骨干网的DDoS防护网络为基础,结合德迅自研的DDoS攻击检测和智能防护体系,向您提供可管理的DDoS防护服务,自动快速的缓解网络攻击对业务造成的延迟增加,访问受限,业务中断等影响,从而…

代码随想录算法训练营第二十九天| 491 递增子序列 46 全排列

目录 491 递增子序列 46 全排列 491 递增子序列 在dfs中进行判断,如果path的长度大于1,则将其添加到res中。 本题nums中的元素的值处于-100与100之间,可以将元素映射0到199之间并且通过布尔数组st来记录此层中元素是否被使用过,…

C练习题_14

一、单项选择题(本大题共 20小题,每小题 2分,共 40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 以下叙述不正确的是() A.一个C源程序可…

高版本Vivado和Linux 4.x内核移植Digilent Driver

移植环境 Vivado 2022.2Ubuntu 22.04petalinux 2022.2Linux内核4.14(xilinx-linux-2018.3)linux-digilent 主要问题 https://github.com/Digilent/linux-digilent 这些驱动支持Linux kernel release 4.x,然而和Vitis 2022.2 套件对应的内核…

buildadmin+tp8表格操作(8) 表格下方添加 合计行

表格的下方可以自定义添加一个合计行&#xff0c;如果有其它的需求&#xff0c; 我们可以添加我们自已需要的行&#xff0c; 并不局限于合计行 以上就可以给表格的最下方添加一个合计行了 完整代码如下 <template><div class"default-main ba-table-box"&…

AVL树你需要了解一下

AVL树介绍 AVL树是一种自平衡二叉查找树&#xff0c;它得名于发明者G.M.Adel’son-Vel’skii和E.M.Landis。AVL树的特点是任何节点的两个子树的高度最大差别为1&#xff0c;因此它也被称为高度平衡树。在AVL树中&#xff0c;每个节点的平衡因子只有-1、0、1三种&#xff0c;通…

人工智能给我们的生活带来了巨大的影响?

1. 人工智能从哪些方面给我们带来了影响&#xff1f; 人工智能出现&#xff0c;极大地影响了人类的生活&#xff0c;下面是人工智能所影响的领域&#xff1a; 1. 日常生活 智能家居: AI驱动的设备&#xff0c;如智能扬声器、灯光、恒温器&#xff0c;正在改变我们与家居环境的…

【鸿蒙最新全套教程】<HarmonyOS第一课>1、运行Hello World

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…

文件上传漏洞(CVE-2022-23043)

简介 CVE-2022-23043是一个与Zenario CMS 9.2文件上传漏洞相关的安全漏洞。该漏洞被定义为文件的不加限制上传&#xff0c;攻击者可以利用这个漏洞上传webshell以执行任意命令。利用这个漏洞的攻击者暂无特定情况。要利用此漏洞&#xff0c;攻击者首先需要访问Zenario CMS的管…

Django 路由配置(二)

一、路由 就是根据用户请求的URL链接来判断对应的出来程序&#xff0c;并返回处理结果&#xff0c;也是就是URL和django的视图建立映射关系. 二、Django请求页面的步骤 1、首先Django确定要使用的根URLconf模块&#xff0c;通过ROOT_URLCONF来设置&#xff0c;在settings.py配置…