给我一对公钥和私钥,我就能破解此RSA
RSA密码系统如果暴露了一套公钥和私钥,那么这套密码系统就全部失效了。因为根据公钥和私钥可以完成大整数的分解、暴露了两个质数。
记公钥为e,私钥为d,因为ed%phi=1,所以就得到了一个k=ed-1,它是phi的整数倍。
随机选择一个2~n之间的整数x,当x的k次幂模n等于1并且k为偶数时,k/=2。
最终求x^k-1和n的最大公约数,此值即为两个质数中的一个。
至于如何证明,我天资愚钝,不需要强行明白此理。
"""
在RSA中,给我一对公钥和私钥,我就可以完成n的大整数分解
RSA过程:
* 先求出两个大质数p,q
* 计算n=pq和phi=(p-1)(q-1)
* 找一个公钥e(e必须和phi互质才行),根据ed%phi=1找出d来
* 加密时:y=x^e%n
* 解密时:y=x^d%n
"""
def gcd(x, y):
return x if y == 0 else gcd(y, x % y)
def pow(a, x, n):
#模幂乘法
ans = 1
for i in range(x):
ans = (ans * a) % n
return ans
def extend_gcd(x,n):
#扩展欧几里得法:求x关于n的逆元
if n==0:return 1,0,x
b,a,d=extend_gcd(n,x%n)
b-=x//n*a
return a,b,d
p, q = 7, 13
n = p * q
phi = (p - 1) * (q - 1)
e=7
d=extend_gcd(e,phi)[0]
k = e*d-1 #已知e,d,求p,q
def test(a):
x = k
while pow(a, x, n) % n == 1 and x % 2 == 0: x //= 2
print(gcd(pow(a, x, n) - 1, n), a, x)
import random
for i in range(2, n):
test(random.randint(2, n))#使用随机产生的2~n之间的整数来测试
给我一对公钥和私钥,我就能破解此RSA的更多相关文章
- Https 公钥、私钥、证书
.https的握手协议: http://blog.csdn.net/clh604/article/details/221799072.证书的概念:http://blog.csdn.net/sealya ...
- PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解
一.公钥加密假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文 ...
- 公钥与私钥对HTTPS的理解(数字证书的需要)
本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...
- RSA公钥,私钥和数字签名通用理解
一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...
- 公钥,私钥和数字签名这样最好理解 分类: B3_LINUX 2015-05-06 16:25 59人阅读 评论(0) 收藏
一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...
- MD5、公钥、私钥、加密、认证
MD5 MD5的全称是Message-Digest Algorithm 5. MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法. 换句话说就是,即使你看到 ...
- 生成 RSA 公钥和私钥的方法
在使用 RSA 加密算法时,需要使用到一对 公钥 和 私钥,生成 公钥 和 私钥 需要借助 openssl 这款工具,下载这款工具的地址如下: http://slproweb.com/products ...
- SSH,公钥,私钥的理解
参考大佬的文章:https://blog.csdn.net/li528405176/article/details/82810342 https://www.cnblogs.com/Bravew ...
- git 生成公钥、私钥方法与clone使用方法
我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...
随机推荐
- Sequence在Oracle中的使用
Oracle中,当需要建立一个自增字段时,需要用到sequence.sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查 ...
- 网页重构应该避免的10大 CSS 糟糕用法
对于网页重构来说,CSS禅意花园 是网页布局从 table 表格转到了 html +css 的标志 .这些年来,随着我们的网站越来越复杂:html5,css3,新的技术.新的属性,越来越多的开发者开始 ...
- C#操作json类型数据
将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象. 此类不能继承. // msdn 例子: namespace SL_DataContractJson ...
- jQuery UI全教程之一(dialog的使用教程)
jQuery UI目前的版本已经更新到了1.8.7.个人感觉和easyui相比起来,jQuery UI在界面的美观程度和可定制型更强一些.所以再次将一些jQuery UI组件的用法说明一下,方便日后查 ...
- 【转】深入理解line-height
原文: http://www.cnblogs.com/dolphinX/p/3236686.html https://www.cnblogs.com/yangjie-space/p/4858132.h ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。
使用VMW安装四台CentOS-7-x86_64-DVD-1804.iso虚拟机: 计划配置三台centos虚拟机: master:192.168.0.120 slave1:192.168.0.121 ...
- Google Java Style 中文版
Google Java Style 中文版 基于官方文档2013.12.19最后一次改动. 翻译人:Weir Zhang (zh.weir) 旁白:水平有限,很多地方只是意译.不准确的地方 ...
- PHPUnit单元测试
单元测试 PHPUnit <?php /** * 定义一个用来被测试的类RemoteConnect * @author json * */ class RemoteConnect{ public ...
- Activity设置Dialog属性点击区域外消失实现方式
通过配置:<item name="android:windowCloseOnTouchOutside">true</item> 通过代码:setFinish ...