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的更多相关文章

  1. Https 公钥、私钥、证书

    .https的握手协议: http://blog.csdn.net/clh604/article/details/221799072.证书的概念:http://blog.csdn.net/sealya ...

  2. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解

    一.公钥加密假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文 ...

  3. 公钥与私钥对HTTPS的理解(数字证书的需要)

    本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...

  4. RSA公钥,私钥和数字签名通用理解

    一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...

  5. 公钥,私钥和数字签名这样最好理解 分类: B3_LINUX 2015-05-06 16:25 59人阅读 评论(0) 收藏

    一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...

  6. MD5、公钥、私钥、加密、认证

    MD5 MD5的全称是Message-Digest Algorithm 5. MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法. 换句话说就是,即使你看到 ...

  7. 生成 RSA 公钥和私钥的方法

    在使用 RSA 加密算法时,需要使用到一对 公钥 和 私钥,生成 公钥 和 私钥 需要借助 openssl 这款工具,下载这款工具的地址如下: http://slproweb.com/products ...

  8. SSH,公钥,私钥的理解

    参考大佬的文章:https://blog.csdn.net/li528405176/article/details/82810342    https://www.cnblogs.com/Bravew ...

  9. git 生成公钥、私钥方法与clone使用方法

    我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...

随机推荐

  1. RAMPS1.4 3d打印控制板接线与测试4

    如果之前的操作都顺利,现在就可以插上USB线,打开printrun上位机软件了.mega2560刚刚接通电源时,RAMPS板子上的LED1(绿色)会闪几下.这说明mega2560板子中的固件正在启动. ...

  2. 转:利用Eclipse CDT 阅读C/C++代码

    转自: https://www.oschina.net/question/234345_41419 排版与说明都很不错,推荐一看.

  3. [Algorithm] Inorder Successor in a binary search tree

    For the given tree, in order traverse is: visit left side root visit right side // 6,8,10,11,12,15,1 ...

  4. 关于Promise的一些个人理解jQuery的deferred

      一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组), ...

  5. setUserVisibleHint-- fragment真正的onResume和onPause方法

    现在越来越多的应用会使用viewpager+fragment显示自己的内容页,fragment和activity有很多共同点,如下图就是fragment的生命周期 但是fragment和activit ...

  6. C#.NET常见问题(FAQ)-如何让TabControl可以动态增加或删除

    动态插入可以使用TabPages.Insert方法   动态删除可以用Remove方法   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/aceta ...

  7. Android应用Preference相关及源代码浅析(SharePreferences篇)

    1 前言 在我们开发Android过程中数据的存储会有非常多种解决方式,譬如常见的文件存储.数据库存储.网络云存储等,可是Android系统为咱们提供了更加方便的一种数据存储方式.那就是SharePr ...

  8. Hadoop学习笔记(一)——编译安装和配置

    近期工作调动.打算补一下大数据处理的知识.可能会陆续涉及hadoop.mongodb.ddbs等. 首先Apache提供二进制的Hadoop版本号是32位的.在启动时总是有警告,所以想自己编译一遍.部 ...

  9. 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)

    之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...

  10. Binutils工具集中的一些比较常用的工具

    addr2line addr2line是用来将程序地址转换成其所对应的程序源文件.代码行以及所对应的函数. ar ar是用来管理档案文件的,在嵌入式系统开发中,ar主要是用来对静态库进行管理. ar常 ...