RSA加密的原理

news2024/11/19 15:27:58

一、RSA加密算法的原理

先上公式:

在这里插入图片描述

加密过程:其实就是明文的E次方对N取模

公钥:(E,N)

解密过程:密文的D次方对N取模

私钥:(D,N)

那么以上公式中的E、D、N分别代表什么,又是如何保证RSA加密算法的安全性的呢?

二、RSA加密为什么是安全的

一、原则:目前计算机无法将一个大整数分解成两个互质的数相乘的结果。如果我告诉你上面公式公式中的N就是这个大整数,而公钥和私钥中的E、D又是根据N计算得到的,那是不是想要破解的人 无法得到N,那么也就无法计算得到D、E,从而无法破解得到公钥和私钥了呢。

二、计算公式
在这里插入图片描述

三、举例

为了计算方便,p q 的值取小一旦,假设:p = 17,q = 19,

则:

(1)求N:N = p * q = 323;

(2)求L:L = lcm(p-1, q-1)= lcm(16,18) = 144,144为16和18对最小公倍数;

(3)求E:1 < E < L ,gcd(E,L)=1,即1 < E < 144,gcd(E,144) = 1,E和144互为质数,E = 5显然满足上述2个条件,故E = 5,此时公钥= (E,N)=(5,323);

(4)求D:求D也必须满足2个条件:1 < D < L,E*D mod L = 1,即1 < D < 144,5 * D mod 144 = 1,显然当D= 29 时满足上述两个条件。1 < 29 < 144,

5 *29 mod 144 = 145 mod 144 = 1,此时私钥=(D,N)=(29,323);

(5)加密:准备的明文必须是小于N的数,因为加密或者解密都要 mod N,其结果必须小于N。

假设明文 = 123,则 密文=(123的5次方)mod 323=225

(6)解密:明文=(225的29次方)mod 323 =123,所以解密后的明文为123。

RSA加密算法使用中需要注意的问题

一、加密算法中使用的Cipher不是线程安全的
二、加密的系统和解密的系统分开部署
三、密钥长度越大,生成密文的长度也就越大,加密的速度也就越慢,而密文也就越难被破解掉
四、RSA 加密实现不允许明文长度超过密钥长度减去 11(单位是字节,也就是 byte)。

如果我们定义的密钥(我们可以通过 java.security.KeyPairGenerator.initialize(int keysize) 来定义密钥长度)长度为 1024(单位是位,也就是 bit),生成的密钥长度就是 1024位 / 8位/字节 = 128字节,那么我们需要加密的明文长度不能超过 128字节 -11 字节 = 117字节

五、Java 默认的 RSA 实现 “RSA/None/PKCS1Padding” 要求最小密钥长度为 512 位(否则会报 java.security.InvalidParameterException: RSA keys must be at least 512 bits long 异常),也就是说生成的密钥、密文长度最小为 64 个字节。如果你还嫌大,可以通过调整算法提供者来减小密文长度:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", "BC");
keyGen.initialize(128);

如此这般得到的密文长度为 128 位(16 个字节)。但是这么干密钥长度太短,容易被破解。

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

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

相关文章

solidworks版本推荐

有不少人在入坑SolidWorks的时候&#xff0c;不知道下载哪一个版本&#xff0c;不清楚SolidWorks哪个版本更好用一些&#xff0c;其实选择适合自己的版本才是关键。那么该如何选择版本呢&#xff1f;不知道如何选择SOLIDWORKS版本的&#xff0c;可以参考以下3个方面。 一、SOL…

自动化测试工具的基本原理以及应用场景

自动化测试工具是现代软件开发流程中必不可少的组成部分&#xff0c;它可以通过编写脚本或使用图形用户界面工具自动化测试过程&#xff0c;提高测试的效率和准确性。本文将介绍自动化测试工具的基本原理以及应用场景。 自动化测试工具的基本原理 自动化测试工具通常采用的原理…

我与smardaten | 百天无码路,苦逼中带点小美好

大家好&#xff0c;我是云华&#xff08;化名&#xff09;&#xff0c;一个不太懂技术的无代码开发者&#xff0c;游走在无码世界的自由闲散人。现今是我从事无码开发的第四个月&#xff0c;已经从小白蜕变成了熟手。前两天&#xff0c;睿睿老师找到我&#xff0c;说最近计划办…

【wpf】枚举的绑定最易用法 和 全局静态绑定的应用

背景 有时我们做配置界面的时候&#xff0c;有很多配置项是枚举。通过我们会用一个Combobox实现&#xff0c;如果能直接用Combobox绑定枚举&#xff0c;那将会非常方便。这里绑定将涉及到两个方面&#xff0c;一个是数据源的绑定&#xff0c;还有就是当前选择项的绑定。最后我们…

每天一道算法练习题--Day23 第一章 --算法专题 --- ----------并查集

背景 相信大家都玩过下面的迷宫游戏。你的目标是从地图的某一个角落移动到地图的出口。规则很简单&#xff0c;仅仅你不能穿过墙。 实际上&#xff0c;这道题并不能够使用并查集来解决。 不过如果我将规则变成&#xff0c;“是否存在一条从入口到出口的路径”&#xff0c;那么…

DDR5内存彻底白菜价,国外大厂却整出了比着火更离谱的骚操作

今年的 PC 硬件市场&#xff0c;似乎出现了明显两极分化现象。 一边是 N、A 两家新显卡价格高高在上&#xff0c;摆明了不坑穷人。 另一边固态硬盘、内存条又在疯狂互卷不断杀价。 四五百元的 2TB SSD&#xff0c;二百元的 16G 内存条早已见怪不怪。 要说面世多年的 PCIe 3.0…

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,基于 CentOS 7 构建 LVS-DR 群集

1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 。 LVS&#xff08;Linux Virtual Server&#xff09;是一个开源的负载均衡软件&#xff0c;它支持多种负载均衡算法&#xff0c;包括 NAT 模式和 DR &#xff08;Direct Routing&#xff09;模式…

【数据分析之道-Matplotlib(二)】Matplotlib 绘图标记

文章目录 专栏导读1、前言2、标记&#xff08;Markers&#xff09;2.1关键词参数marker2.2标记参考&#xff08;Marker Reference&#xff09; 3、Format Strings fmt3.1fmt参数3.2线参考&#xff08;Line Reference&#xff09; 4、标记颜色(Marker Color)4.1关键字参数mec4.2…

《程序员面试金典(第6版)》面试题 16.14. 最佳直线(向量,C++)

题目描述 给定一个二维平面及平面上的 N 个点列表Points&#xff0c;其中第i个点的坐标为Points[i][Xi,Yi]。请找出一条直线&#xff0c;其通过的点的数目最多。 设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S&#xff0c;你仅需返回[S[0],S[1]]作为答案&#xf…

简述对象检测与图像分类与关键点检测区别

计算机视觉是人工智能的一个多元化领域&#xff0c;旨在检测和识别图像或视频的内容。大多数开始计算机视觉领域之旅的人的常见问题之一是&#xff1a;目标检测、图像分类和关键点检测之间有什么区别&#xff1f; 让我们先看看 什么是对象检测 对象检测是一种计算机视觉和图像…

gateway sentinel 流控规则持久化到 nacos

Sentinel改造 sentinel版本是1.8.6 直接看更新内容, 右侧更新后 GatewayApiController /*** Gateway api Controller for manage gateway api definitions.** author cdfive* since 1.7.0*/ RestController RequestMapping(value "/gateway/api") public class…

【操作系统】内存空间

最小的操作系统Hello world 想要pmap这个进程&#xff0c;需要进程号 但是这个进程在启动的一瞬间就执行完了 用GDB把程序暂停下来&#xff0c;然后用pmap观察地址空间 用info inferiors得到gdb里的进程号 ro 可读 &#xff1a;只读数据 rx 可读可执行 &#xff1a;代码 rw 可…

Java学习:Scanner类及其应用

Java Scanner 一、next()二、nextLine()三、应用 一、next() 用于从标准输入读取下一个字符串。该方法会扫描输入流并返回下一个非空白字符序列&#xff0c;以空格、制表符或换行符作为分隔符 1、next()会以空格作为分隔符,一行输入1 2 3,只会打印出1 import java.util.Scan…

Java RSA密钥转换,从RSAPrivateKey得到RSAPublicKey

概述&#xff1a; 在Java编程中&#xff0c;我们经常用到如下一段代码来生成RSA公私钥&#xff0c;分别拿到公私钥然后加解密计算&#xff1a; KeyPairGenerator keyPairGen; keyPairGen KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(2048, new S…

Oracle Instant Client + PLSQL 部署终端PC远程连接数据库服务器简易操作

系统环境&#xff1a; 1、win7_64bit 2、instantclient_21_10 3、plsqldev1105_x64 4、远程Oracle数据库&#xff1a;Oracle11g R2 操作步骤&#xff1a; 1、下载好Oracle Instant Client 和PLSQL程序安装包&#xff1a; 1.1 Oracle Instant Client 官网&#xff1a;https://w…

MySQL基础(五)排序与分页

1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date FROM employees ORDER…

Redis之三大特殊数据类型:Geospatial:地理位置 hyperloglog:实现的功能是计算统计 bitmaps:位存储

三大特殊数据类型结构&#xff0c;十分的少见但是开源项目中依然有它们的身影 Geospatial:地理位置 实现的功能&#xff1a;附近的人&#xff0c;城市与城市之前的距离计算 添加城市经纬度到key中&#xff0c;经纬度则是key的value值&#xff0c;在正常的开发过程中&#xf…

获得 随机验证码(以图片为底层)

1&#xff1a;工具类 Slf4j public class RandomValidateCode {private static String baseNumLetter "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";private static String font "微软雅黑";//绘制验证码图片,返回验证码文本内容pu…

【机器学习】pytorch安装——环境配置(极简教程)

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 省流总结新建环境确定显卡型号安装显卡驱动安装pytorch国内镜像下载本地下载 验证安装成功 最近重新配置环境&#xff0c;简单记录一下。最近chatgpt等大语言模型和ai绘图火热&#xff0c;也为了方便很多…

视频剪辑必备的6个免费素材网站

做视频剪辑需要用到视频、音频、图片等素材&#xff0c;推荐几个网站&#xff0c;有免费、有付费&#xff0c;可根据需求自信选择~赶紧收藏起来&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频等各种…