浅析RSA非对称加密算法

news2024/11/16 1:37:04

目录

引言

凯撒密码

对称加密

非对称加密

​编辑总结


引言

几月前在知乎上看到一个关于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.coloradmin.cn/o/1231930.html

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

相关文章

css 实现文字流光效果

经过调研发现大多滑块验证码中,有一些文字流光效果,因此在这里简单实现一下。 实现主要利用background 渐变背景以及backgorund-clip:text实现。具体代码如下 css部分 .slide {width: 300px;height: 40px;border: 1px solid #ccc;border-radius: 8px;…

猫12分类:使用yolov5训练检测模型

前言: 在使用yolov5之前,尝试过到百度飞桨平台(小白不建议)、AutoDL平台(这个比较友好,经济实惠)训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置…

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

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

pyQt主界面与子界面切换简易框架

本篇来介绍使用python中是Qt功能包,设置一个简易的多界面切换框架,实现主界面和多个子界面直接的切换显示。 1 主界面 设计的Demo主界面如下,主界面上有两个按钮图标,点击即可切换到对应的功能界面中,进入子界面后&a…

猫12分类:使用多线程爬取图片的Python程序

本文目标 对于猫12目标检测部分的数据集,采用网络爬虫来制作数据集。 在网络爬虫中,经常需要下载大量的图片。为了提高下载效率,可以使用多线程来并发地下载图片。本文将介绍如何使用Python编写一个多线程爬虫程序,用于爬取图片…

飞翔的小鸟

运行游戏如下: 碰到柱子就结束游戏 App GameApp类 package App;import main.GameFrame;public class GameApp {public static void main(String[] args) {//游戏的入口new GameFrame();} } main Barrier 类 package main;import util.Constant; import util.Ga…

Linux--网络编程

一、网络编程概述1.进程间通信: 1)进程间通信的方式有**:管道,消息队列,共享内存,信号,信号量这么集中 2)特点:依赖于linux内核,基本是通过内核来实现应用层…

线上bug-接口速度慢

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,双非大四,Java实习中…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正&a…

十四、Docker的基本操作

目录 (一)镜像命令 一、拉取Nginx 二、查看镜像 三、导出文件 四、删除镜像 五、加载镜像 (二)容器命令 一、例子:运行一个nginx容器 1、输入运行命令 2、使用命令查看宿主机ip 3、在外部浏览器访问 4、查看…

函数调用分析

目录 函数相关的汇编指令 JMP指令 call指令 ret指令 VS2019正向分析main函数 总结调用函数堆栈变化规律 x64dbg分析调用函数 IDA分析调用函数 函数相关的汇编指令 JMP指令 JMP 指令表示的是需要跳转到哪个内存地址,相当于是间接修改了 EIP 。 call指令 ca…

NX二次开发UF_CAM_ask_blank_matl_db_object 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_blank_matl_db_object Defined in: uf_cam.h int UF_CAM_ask_blank_matl_db_object(UF_CAM_db_object_t * db_obj ) overview 概述 This function provides the database object which …

使ros1和ros2的bag一直互通

很多文章都是先source ros1 然后source ros2,再play bag source /opt/ros/noetic/setup.bash source /opt/ros/foxy/setup.bash ros2 bag play -s rosbag_v2 kitti_raw00.bag 但实测会出问题: 为使ros1和ros2的bag一直互通 sudo apt update sudo apt install ros-foxy-ro…

axios的原理及实现一个简易版axios

面试官:你了解axios的原理吗?有看过它的源码吗? 一、axios的使用 关于axios的基本使用,上篇文章已经有所涉及,这里再稍微回顾下: 发送请求 import axios from axios;axios(config) // 直接传入配置 axio…

hdfsClient_java对hdfs进行上传、下载、删除、移动、打印文件信息尚硅谷大海哥

Java可以通过Hadoop提供的HDFS Java API来控制HDFS。通过HDFS Java API,可以实现对HDFS的文件操作,包括文件的创建、读取、写入、删除等操作。 具体来说,Java可以通过HDFS Java API来创建一个HDFS文件系统对象,然后使用该对象来进…

PPT幻灯片里的图片,批量提取

之前分享过如何将PPT文件导出成图片,今天继续分享PPT技巧,如何提取出PPT文件里面的图片。 首先,我们将PPT文件的后缀名,修改为rar,将文件改为压缩包文件 然后我们将压缩包文件进行解压 最好是以文件夹的形式解压出来…

车载毫米波雷达行业发展1——概述

1.1 毫米波雷达定义及产品演进 1.1.1 毫米波雷达定义 毫米波雷达(mmWave Radar)是指工作在毫米波波段的雷达,其频域介于 30~300GHz,波长1~10mm。毫米波雷达稳定性高,抗干扰能力强,可穿透雾、烟、灰尘环境&#xff0…

发币成功,记录一下~

N年前就听说了这样一种说法——“一个熟练的区块链工程师,10分钟就可以发出一个新的币” 以前仅仅是有这么一个认识,但当时并不特别关注这个领域。 最近系统性学习中,今天尝试发币成功啦,记录一下~ 发在 Sepolia Tes…

CentOS7安装部署Kafka with KRaft

文章目录 CentOS7安装部署Kafka with KRaft一、前言1.简介2.架构3.环境 二、正文1.部署服务器2.基础环境1)主机名2)Hosts文件3)关闭防火墙4)JDK 安装部署 3.单机部署1)下载软件包2)修改配置文件3&#xff0…

[Genode] ARM TrustZone

这是关于读文章ARM TrustZone的记录,原文是英文,刚开始会有点反应不过来,这里大部分是对文章的翻译与提取。 ARM信任区技术 ARM信任区是在 热烈讨论关于X86平台上的可信平台模块(TPM) 时引入的。。 就像TPM芯片神奇…

◢Django 分页+搜索

1、搜索数据 从数据库中获取数据,并进行筛选,xx__contains q作为条件,查找的是xx列中有q的所有数据条 当有多个筛选条件时,将条件变成一个字典,传入 **字典 ,ORM会自行翻译并查找。 筛选电话号码这一列…