湖湘杯有一道题是知道 (N,e,d) 求 (p,q),当时用了 e⋅d−1=h⋅φ(n) 这个公式,爆破 h,考虑 φ(n) 与 N 相差不大,可以认为位数相同,求出 φ(n) 之后再根据 N=p⋅q 和 φ(n)=(p−1)(q−1) 联立一个方程。

N=pq

φ(n)=(p−1)(q−1)

⇒N−φ(n)+1=p+q

可得到一个一元二次方程

X2−(N−φ(n)+1)X+N=(X−p)(X−q)

根据求根公式即可解出 p 和 q。

# coding=utf-8
import gmpy2def cal_bit(num):return len(bin(num)) - 2d = 5
e = 88447120342035329077203801890175181441227843548712394915405983098804986074228491993716303861346713336901472423214577098721961679062412555594462454080858396158886857405021364693424253936899868042331165487633709535319154171592544118785565876198853503758641178366299573880796663815089204345025378660387680199869
n = 0x009d70ebf2737cb43a7e0ef17b6ce467ab9a116efedbecf1ead94c83e5a082811009100708d690c43c3297b787426b926568a109894f1c48257fc826321177058418e595d16aed5b358d61069150cea832cc7f2df884548f92801606dd3357c39a7ddc868ca8fa7d64d6b64a7395a3247c069112698a365a77761db6b97a2a03a5k = e * d - 1while k % 2 == 0:k /= 2if cal_bit(k) == cal_bit(n):print kbreaka = 1
b = (n - k + 1)
c = n
p = (b + gmpy2.iroot(b**2-4*a*c, 2)[0])/2
q = n / p
print int(p)
print q

之后看到有人发了 writeup,用了 Calculate primes p and q from private exponent (d), public exponent (e) and the modulus (n) 链接里的算法。

The steps involved are:

  1. Let k=de–1. If k is odd, then go to Step 4.
  2. Write k as k=2t⋅r, where r is the largest odd integer dividing k, and t≥1. Or in simpler terms, divide k repeatedly by 2 until you reach an odd number.
  3. For i=1 to 100 do:

    1. Generate a random integer g in the range [0, n−1].
    2. Let y=grmodn
    3. If y=1 or y=n–1, then go to Step 3.1 (i.e. repeat this loop).
    4. For j=1 to t–1 do:

      1. Let x=y2modn
      2. If x=1, go to (outer) Step 5.
      3. If x=n–1, go to Step 3.1.
      4. Let y=x.
    5. Let x=y2modn
    6. If x=1, go to (outer) Step 5.
    7. Continue
  4. Output “prime factors not found” and stop.
  5. Let p=GCD(y–1,n) and let q=n/p
  6. Output (p,q) as the prime factors.

原 writeup 里的代码是基于 sage 库的,而且有点看脸,没好好处理结果,改写了一个纯 Python 的。

# coding=utf-8
import random
import libnumd = 5
e = 88447120342035329077203801890175181441227843548712394915405983098804986074228491993716303861346713336901472423214577098721961679062412555594462454080858396158886857405021364693424253936899868042331165487633709535319154171592544118785565876198853503758641178366299573880796663815089204345025378660387680199869
n = 0x009d70ebf2737cb43a7e0ef17b6ce467ab9a116efedbecf1ead94c83e5a082811009100708d690c43c3297b787426b926568a109894f1c48257fc826321177058418e595d16aed5b358d61069150cea832cc7f2df884548f92801606dd3357c39a7ddc868ca8fa7d64d6b64a7395a3247c069112698a365a77761db6b97a2a03a5k = e * d - 1r = k
t = 0
while True:r = r / 2t += 1if r % 2 == 1:breaksuccess = Falsefor i in range(1, 101):g = random.randint(0, n)y = pow(g, r, n)if y == 1 or y == n - 1:continuefor j in range(1, t):x = pow(y, 2, n)if x == 1:success = Truebreakelif x == n - 1:continueelse:y = xif success:breakelse:continueif success:p = libnum.gcd(y - 1, n)q = n / pprint 'P: ' + '%s' % pprint 'Q: ' + '%s' % q
else:print 'Cannot compute P and Q'

RSA 中根据 (N, e, d) 求 (p, q)相关推荐

  1. 一张图片中的分离数据+十进制删改十六进制+连续base32和64编码+okk编码题目--rsa中求d题目

    目录 一张图片题目 题目rsa中求d 题目来源ctf杂项50 一张图片题目 1.图片用010打开后,发现这张图片数据过多,搜索到flag.zip压缩包文件可能需要分离文件 2.使用binwaik发现有 ...

  2. RSA算法习题 (采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。)

    1.采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文. 2. 找出质数 P.Q P=11 Q=13 3. 计算公共模数 N = P * Q = 143 4 ...

  3. 在非对称加密算法RSA中,假设“大”素数p=5,q=11,试给出计算过程。

    文章目录 1. 题目在非对称加密算法RSA中,假设"大"素数p=5,q=11,试给出计算过程. 2. 分析步骤 3. 抄作业简单粗暴看这里 4. 参考 1. 题目在非对称加密算法R ...

  4. RSA加密原理详解,以及RSA中的数论基础

    文章目录 1. RSA加密算法介绍 2. RSA密钥生成 3. RSA加密和解密 4. RSA的安全性 5.涉及到的数论基础 5.1. 模的逆元 5.1.1. 扩展欧几里得算法计算模逆元 5.1.2. ...

  5. 【深度学习】神经网络中几个常用的求导公式

    ‍‍ 亲爱的朋友们,多多有一段时间没有更新啦,主要是我在学习transformers突然开始思考几个神经网络相关的基本问题(模型结构越写越复杂,调包效果越来越好,是否还记得为什么而出发呢?),读者朋友 ...

  6. python中对两个 list 求交集,并集和差集

    python中对两个 list 求交集,并集和差集: 1.首先是较为浅白的做法: >>> a=[1,2,3,4,5,6,7,8,9,10] >>> b=[1,2,3 ...

  7. RSA中 底数m和模数 n 不互素是仍然成立

    前言:仅个人小记. 注意到 RSA 中并不要求消息 m 要和模数 n 互素,而 RSA 所依赖的"费马定理,欧拉定理",仿佛都要要求 m 须和模数 n 互素.这里给出针对 RSA ...

  8. 机器学习中的线性代数之矩阵求导

    前面针对机器学习中基础的线性代数知识,我们做了一个常用知识的梳理.接下来针对机器学习公式推导过程中经常用到的矩阵求导,我们做一个详细介绍. 矩阵求导(Matrix Derivative)也称作矩阵微分 ...

  9. 数据库候选关键词怎么求_关系模式中候选关键字的图论求解法

    关系模式中候选关键字的图论求解法 李 莉 [摘 要] 文章首先介绍了函数依赖图的概念及理论,并应用该理论对数据库理 论和实际问题中关系模式候选关键字的求解问题进行了深入系统的讨论,并用 该方法解决了关 ...

最新文章

  1. 接口(Interface)的深入理解
  2. final cut pro编辑的时候
  3. VMWare 黑苹果卡在Logo页面
  4. 笛卡尔集基本原理,等值连接,不等值连接,外连接,自连接
  5. 【Java】七巧板着色问题
  6. java图片查看器下载_java照片查看器源代码
  7. 一主多备几影响 oracle,1个主库配置多个备库的问题
  8. 《MySQL技术内幕(SQL编程)》——基础
  9. agc016B - Colorful Hats(智商题)
  10. 红盟云卡-开源的发卡网源码
  11. 最炫黑科技还得谷歌!一副眼镜告别学外语,一个地图App在家沉浸式环球游
  12. 操作系统实验七:动态分区分配方式的模拟
  13. (固态)产品的质量和可靠性标准全系列(JEDEC+ASTM) - 最齐全、最完整及最新版
  14. 初次接触peoplesoft
  15. 顶级二级三级域名的区别
  16. 蓝桥ROS之f1tenth案例学习与调试(成功)
  17. 透过2W条评论看动漫《博人传-火影忍者新时代》
  18. ARM立即寻址中有效立即数的计算
  19. 100+家公司的JAVA面试八股文,终于整理完了
  20. bartender mysql_详解BarTender连接数据库方法

热门文章

  1. MAC Book Pro 使用 libmodbus
  2. 2021网易秋招笔试题(Android开发)
  3. 一名优秀的数据分析,需要满足哪些基本条件?
  4. [原创] Hzc:FZL中带点鼠绘的感觉(教程)
  5. MacOS Big Sur Beta 测评|使用体验|有哪些BUG?|如何安装?|实际体验如何?|WWDC2020
  6. 论文略读:《地区如何随着时间的推移而多样化?产业关系与地区新增长路径的发展》
  7. 丰巢互动媒体的新玩法,智能柜焕新“皮肤”了解一下
  8. DS1302 万年历时钟乱跳数值 85 85 85 11 11 11
  9. C/C++编程学习 - 第7周 ⑥ 合影效果
  10. 【系】微信小程序云开发实战坚果商城-商城项目搭建