RSA原理说明

长度,建议至少1024。模数n(常取默认65537)两边都要用。
指数e,和n一起就是公钥。
指数d,和n一起就是私钥。
质数p和q用于生成密钥对,然后就丢弃不公开。
一。密钥对的生成步骤
1、随机选择两个不相等的质数p和q。
2、计算p和q的乘积n。
3、计算p-1和q-1的乘积m。
4、随机选个整数e,e与m要互质,且0<e<m。
5、计算e的模反元素d。
6、n,e组成公钥,n,d组成私钥。
用公钥(n, e)加密:明文e ≡ 密文 (mod n)
用私钥(n, d)解密:密文d ≡ 明文 (mod n)
上述表达式是同余式,也就是“≡”两边mod n是相等的。mod运算就是取被除数 / 除数得到的余数,运算符是%。比如5%3=2。所以上式也可表达成
用公钥(n, e)加密:密文 = 明文e % n
用私钥(n, d)解密:明文 = 密文d % n
一。
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| i mod 4 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
| i mod 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 |
(a % 4)是以4为周期在循环,(a % 7)是以7为周期在循环,而且数对(a % 4, a % 7)在这个[0,21]之间并没有出现重复,也就是说由(a % 4, a % 7)可以确定a的值
如果n个数互质,且乘积为P,有一个未知数M,已知M分别除以n个数的余数,那个在0<M<P的范围内,可以确定唯一的M值。
二。
13 * 77 = 1001 => 1001 % 1000 = 1
=> 1001 ≡ 1 (mod 1000)
=> a * 1001 ≡ a (mod 1000)
就是说任何数乘以1001除以1000得到余数是本身。因此:
(a * 1001) % 1000 = (a * 13 * 77) % 1000 = ((a * 13) % 1000) * 77) % 1000
理解一下就能发现,我们并不需要知道a * 13的积是多少,而是知道它除以1000的余数就行了,因为反正最后都是要模1000,那事先拿一部分来模1000并不影响结果。
除法类似,两个数乘积除以另一个数,那事先用一个乘数除以除数,得到的值再乘以另一个乘数再除,并不影响结果。这个思想,也是RSA用来当被模数过大时优化计算力的算法。
你心想三位数,乘以13,告诉我乘积的后三位数,我就能知道你想的是哪个数!
假如你想的是233,233*13=3029,所以你告诉我的是029,我只要把29*77=2233,积的后三位数233就是你心想的数。
这里就有点非对称的影子了,(1000, 13)就是公钥,(1000, 77)就是私钥。
3.费马小定理

☆ p = 3
22 - 1 = 3, 24 - 1 = 15 = 3×5, 26 - 1 = 63 = 3×21, 28 - 1 = 255 = 3×85, 210 - 1 = 1023 = 3×341, ...
费马指数:2, 4, 6, 8, 10, ......
☆ p = 5
24 - 1 = 15 = 5×3, 28 - 1 = 255 = 5×51, 212 - 1 = 4095 = 5×819, 216 - 1 = 65535 = 5×13107, ...
费马指数:4, 8, 12, 16, ......
☆ p = 7
23 - 1 = 7 = 7×1, 26 - 1 = 63 = 7×9, 29 - 1 = 511 = 7×73, 212 - 1 = 4095 = 7×585, ...
费马指数:3, 6, 9, 12, ......
☆ p = 11
210 - 1 = 1023 = 11×93, 220 - 1 = 1048575 = 11×95325, 230 - 1 = 1073741823 = 11×797612893, ...
费马指数:10, 20, 30, ......
参考:
https://toutiao.io/posts/u6ehd/preview
图片:http://introcs.cs.princeton.edu/java/99crypto/
RSA原理说明的更多相关文章
- RSA原理及生成步骤
摘自:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html(可到原网址查看秘钥生成原理) RSA算法原理(一) 因为它是 ...
- RSA原理、ssl认证、Tomcat中配置数字证书以及网络传输数据中的密码学知识
情形一:接口的加.解密与加.验签 rsa不是只有加密解密,除此外还有加签和验签.之前一直误以为加密就是加签,解密就是验签.这是错误的! 正确的理解是: 数据传输的机密性:公钥加密私钥解密是密送,保 ...
- RSA - 原理、特点(加解密及签名验签)及公钥和私钥的生成
Wiki - RSA加密演算法 Wiki - 欧拉函数 Wiki - 模反元素 ASN.1 格式标准 RSA算法原理(二) 注意: RSA 加密或签名后的结果是不可读的二进制,使用时经常会转为 BAS ...
- 转: RSA原理 阮一峰的博客
转:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 讲的非常细致,易懂.
- 数字签名中公钥和私钥是什么?对称加密与非对称加密,以及RSA的原理
http://baijiahao.baidu.com/s?id=1581684919791448393&wfr=spider&for=pc https://blog.csdn.net/ ...
- (转)对称加密与非对称加密,以及RSA的原理
一 概述 二对称加密和非对称加密 对称加密 非对称加密 区别 三RSA原理 整数运算 同余运算 当模数为合数n时 当模数为质数p的时候 离散对数问题 RSA原理 一 , 概述 在现代密码学诞生以前,就 ...
- Windows phone应用开发[19]-RSA数据加密
在这个系列的第十六章节中Windows phone应用开发[16]-数据加密 中曾详细讲解过windows phone 常用的MD5,HMAC_MD5,DES,TripleDES[3DES] 数据加密 ...
- RSA算法详解
1.RSA加密算法是最常用的非对称加密算法 2.RSARSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名, 3.目前学术界无法证明RS ...
- RSA加解密算法以及密钥格式
RSA算法: 有个文章关于RSA原理讲的不错: https://blog.csdn.net/dbs1215/article/details/48953589 http://www.ruanyifeng ...
随机推荐
- HTML5和CSS3扁平化风格博客(基础篇)
多学一点总是好的~ 自始至终都觉得的css和html效果比较美观,于是在看慕课网教程时,自己也跟着敲了深爱着的前端代码 这部分分为两部分:①基础篇:http://www.imooc.com/learn ...
- 扩展方法以及LinQ的学习
我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用 ...
- Windows进程间共享内存通信实例
Windows进程间共享内存通信实例 抄抄补补整出来 采用内存映射文件实现WIN32进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在WIN32进程中保 ...
- session超时跃出iframe并跳到登陆页面(转载)
session超时跳出iframe并跳到登陆页面 在网页编程时,我们经常需要处理,当session过期时,我们要跳到登陆页面让用户登陆,由于我们可能用到IFrame框架,所以我们我登陆页面需要显示在整 ...
- Delphi应用程序的调试(二)使用断点
Delphi应用程序的调试(二)使用断点 使用断点(Using Breakpoints) 当用户从Delphi IDE 运行程序时,程序全速运行,只会在设置了断点的地方停住. New Term 断点( ...
- java基础---->Runtime类的使用(一)
这里面我们对java中的Runtime类做一个简单的了解介绍.若不常想到无常和死,虽有绝顶的聪明,照理说也和呆子一样. Runtimeo类的使用 一.得到系统内存的一些信息 @Test public ...
- TCP数据传输过程详解
在学习三次握手的时候,我们知道其中有seq.ack两个序列号. 如果不仔细了解,那么可能只知道发回去的时候要加一. 下文将着重介绍,关于序列号的传输过程. 最关键的一句话:序列号为当前端成功发送的数据 ...
- junit4 详解
转:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html JUnit4概述 JUnit4是JUnit框架有史以来的最大改进, ...
- ORA-00600: internal error code, arguments: [kgl-no-mutex-held]
一.环境 windows oracle 11.2.0.4 RAC 二.问题现象 1.连接数据库后,无法查询 2.报错信息:ORA-00600: internal error code, argumen ...
- VS自动添加头部注释
让VS自动生成类的头部注释,只需修改两个文集即可,一下两个路径下个有一个 Class.cs文件 D:\Program Files (x86)\Microsoft Visual Studio 14.0\ ...