给我一对公钥和私钥,我就能破解此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 ...
随机推荐
- SVN详细配置与使用 ——一步步教会您使用
项目管理在项目开发活动中起到非常重要的作用,而对于初学者来说学习有一定的难度,且不说如何使用,就是搭建过程恐怕也要费一般周折,介于此下面就通过图解的方式一步一步详细的教大家如何使用SVN,你只要耐心的 ...
- android bundle 对象 序列化
Android使用Intent.putSerializable()进行数据传递,或者使用Bundle进行数据传递,实质上都是进行的Serializable数据的操作,说白了都是传递的原数据的一份拷贝, ...
- xgboost入门与实战(实战调参篇)
https://blog.csdn.net/sb19931201/article/details/52577592 xgboost入门与实战(实战调参篇) 前言 前面几篇博文都在学习原理知识,是时候上 ...
- awk的基本使用方法
awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序. 它依次处理文件的每一行,并读取里面的每一个字段.对于日志.CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具 ...
- Spring(十九):Spring AOP(三):切面的优先级、重复使用切入点表达式
背景: 1)指定切面优先级示例:有的时候需要对一个方法指定多个切面,而这多个切面有时又需要按照不同顺序执行,因此,切面执行优先级别指定功能就变得很实用. 2)重复使用切入点表达式:上一篇文章中,定义前 ...
- 一个小框架,基于rx_retrofit2_mvp
离职在即,也没什么事情做,就鼓捣了一下.任意搭建了一个小框架,看看以后能不能搞出自己的一个model,好了.不说别的,上代码 1,先上依赖库 compile 'io.reactivex:rxandro ...
- 用Telnet测试服务器的端口是否开通
可以用telnet测试远程服务器的端口是否开通,格式如下: telnet <server name> <port number> 例如: Telnet tserv 3389 ...
- Get file extention in XSLT
When working with data view web parts or data form web parts in SharePoint, you might want to use ...
- Node.js中 express-session的奇怪问题
var session = require('express-session'); app.use(cookieParser()); 行 登录以后访问的时候有时候会报这样的错误: The la ...
- 支付宝支付-PC电脑网站支付
支付产品全面升级(更新时间:2017/05/05 ),若您使用的是老接口,请移步老版本即时到账文档. 支持沙盒环境的测试 此项目已开源欢迎Start.PR.发起Issues一起讨论交流共同进步 htt ...