d3factor

(来源:AntCTF & Dˆ3CTF 2022)

from Crypto.Util.number import bytes_to_long, getPrime
from secret import msg
from sympy import nextprime
from gmpy2 import invert
from hashlib import md5flag = 'd3ctf{'+md5(msg).hexdigest()+'}'
p = getPrime(256)
q = getPrime(256)
assert p > q
n = p * q
e = 0x10001
m = bytes_to_long(msg)
c = pow(m, e, n)N = pow(p, 7) * q
phi = pow(p, 6) * (p - 1) * (q - 1)
d1 = getPrime(2000)
d2 = nextprime(d1 + getPrime(1000))
e1 = invert(d1, phi)
e2 = invert(d2, phi)print(f'c = {c}')
print(f'N = {N}')
print(f'e1 = {e1}')
print(f'e2 = {e2}')
'''
c = 2420624631315473673388732074340410215657378096737020976722603529598864338532404224879219059105950005655100728361198499550862405660043591919681568611707967
N = 1476751427633071977599571983301151063258376731102955975364111147037204614220376883752032253407881568290520059515340434632858734689439268479399482315506043425541162646523388437842149125178447800616137044219916586942207838674001004007237861470176454543718752182312318068466051713087927370670177514666860822341380494154077020472814706123209865769048722380888175401791873273850281384147394075054950169002165357490796510950852631287689747360436384163758289159710264469722036320819123313773301072777844457895388797742631541101152819089150281489897683508400098693808473542212963868834485233858128220055727804326451310080791
e1 = 425735006018518321920113858371691046233291394270779139216531379266829453665704656868245884309574741300746121946724344532456337490492263690989727904837374279175606623404025598533405400677329916633307585813849635071097268989906426771864410852556381279117588496262787146588414873723983855041415476840445850171457530977221981125006107741100779529209163446405585696682186452013669643507275620439492021019544922913941472624874102604249376990616323884331293660116156782891935217575308895791623826306100692059131945495084654854521834016181452508329430102813663713333608459898915361745215871305547069325129687311358338082029
e2 = 1004512650658647383814190582513307789549094672255033373245432814519573537648997991452158231923692387604945039180687417026069655569594454408690445879849410118502279459189421806132654131287284719070037134752526923855821229397612868419416851456578505341237256609343187666849045678291935806441844686439591365338539029504178066823886051731466788474438373839803448380498800384597878814991008672054436093542513518012957106825842251155935855375353004898840663429274565622024673235081082222394015174831078190299524112112571718817712276118850981261489528540025810396786605197437842655180663611669918785635193552649262904644919
'''

由于
e1∗d1modphi=1e1*d1\quad mod\quad phi=1e1∗d1modphi=1
e2∗d2modphi=1e2*d2\quad mod\quad phi=1e2∗d2modphi=1

e1∗e2∗(d1−d2)=e2−e1modphie1*e2*(d1-d2)=e2-e1 \quad mod \quad phie1∗e2∗(d1−d2)=e2−e1modphi

d1−d2=(e2−e1)∗invert(e1∗e2,phi)d1-d2 =(e2-e1)*invert(e1*e2,phi)d1−d2=(e2−e1)∗invert(e1∗e2,phi)

搜到W&M的WP

但是还是不明白为啥invert(e1*e2,N)可以直接用N,而不是phi

等官方WP

好的,搞明白了
有篇描述这类问题的文章

理论如下

还有个例子
弄明白了
代码如下

sage: c = 24206246313154736733887320743404102156573780967370209767226035295988643385324042248792190591
....: 05950005655100728361198499550862405660043591919681568611707967
....: N = 14767514276330719775995719833011510632583767311029559753641111470372046142203768837520322534
....: 078815682905200595153404346328587346894392684793994823155060434255411626465233884378421491251784
....: 478006161370442199165869422078386740010040072378614701764545437187521823123180684660517130879273
....: 706701775146668608223413804941540770204728147061232098657690487223808881754017918732738502813841
....: 473940750549501690021653574907965109508526312876897473604363841637582891597102644697220363208191
....: 233137733010727778444578953887977426315411011528190891502814898976835084000986938084735422129638
....: 68834485233858128220055727804326451310080791
....: e1 = 4257350060185183219201138583716910462332913942707791392165313792668294536657046568682458843
....: 095747413007461219467243445324563374904922636909897279048373742791756066234040255985334054006773
....: 299166333075858138496350710972689899064267718644108525563812791175884962627871465884148737239838
....: 550414154768404458501714575309772219811250061077411007795292091634464055856966821864520136696435
....: 072756204394920210195449229139414726248741026042493769906163238843312936601161567828919352175753
....: 088957916238263061006920591319454950846548545218340161814525083294301028136637133336084598989153
....: 61745215871305547069325129687311358338082029
....: e2 = 1004512650658647383814190582513307789549094672255033373245432814519573537648997991452158231
....: 923692387604945039180687417026069655569594454408690445879849410118502279459189421806132654131287
....: 284719070037134752526923855821229397612868419416851456578505341237256609343187666849045678291935
....: 806441844686439591365338539029504178066823886051731466788474438373839803448380498800384597878814
....: 991008672054436093542513518012957106825842251155935855375353004898840663429274565622024673235081
....: 082222394015174831078190299524112112571718817712276118850981261489528540025810396786605197437842
....: 655180663611669918785635193552649262904644919
sage: a = (e2-e1)*inverse_mod(e1*e2,N)
sage: ZmodN = Zmod(N)
sage: p.<x> = PolynomialRing(ZmodN)
sage: f = x-a
sage: x0 = f.small_roots(X = 2^1000,beta = 0.4)
sage: d1_d2 = x0[0]
sage: p = gcd(x0[0]*e1*e2 - (e2-e1),N)
sage: p
302041005420039804788837973713898327221537364540217123524277085489425015387406302827931741511110799839253993542589980437030294737549654496720894473925249726898113670841165053274897225331487693822448903890664321018179858685020471572484115220669783927170647297629616743131628132318835058700355916820746650505209238111625956099990183829787016000154371928717007922683297772484179270642107118214144502646097942422343431687478702790785714060858198343943546186776012201

然后我就卡了,卡到了

不太明白为啥iroot()不能用

啊,我知道了,这是gmpy2里的函数,忘记导入库了
继续

sage: from gmpy2 import *
sage: p = iroot(int(p),6)[0]
sage: q = N//(p**7)
sage: p**7*q==N
True
sage: phi = (p-1)*(q-1)
sage: n = p*q
sage: e = 0x10001
sage: d = inverse_mod(e,phi)
sage: pow(c,d,n)
241315145717868965507118897136682379087725777007508595870730075127504766444100339916188490986308417023257111991510218526173748364840319314752531758
sage:

然后就出来了

2022-03-09相关推荐

  1. P1422 小玉家的电费--2022.03.15

    /* P1422 小玉家的电费--2022.03.15 https://www.luogu.com.cn/problem/P1422 */ #include <bits/stdc++.h> ...

  2. 1.5 编程基础之循环控制 11 整数的个数(2022.01.09)--python

    http://noi.openjudge.cn/ch0105/11/ """ 1.5 编程基础之循环控制 11 整数的个数(2022.01.09) http://noi. ...

  3. Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27)

    Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27) 一.更新电脑显卡驱动(以mx150为例) 1.打开英伟达驱动下载官网:https://www.nvi ...

  4. 2022.03全国青少年软件编程(图形化)等级考试试卷(三级)

    2022.03全国青少年软件编程(图形化)等级考试试卷(三级) 更多内容请查看网站: http://www.wancode.net 历年真题模拟题实时更新

  5. 2022.03全国青少年软件编程(图形化)等级考试试卷(二级)

    2022.03全国青少年软件编程(图形化)等级考试试卷(二级) 更多内容请查看网站: http://www.wancode.net 历年真题模拟题实时更新

  6. 2022.03全国青少年软件编程(图形化)等级考试试卷(四级)

    2022.03全国青少年软件编程(图形化)等级考试试卷(四级) 更多内容请查看网站: http://www.wancode.net 历年真题模拟题实时更新

  7. http://www.blogjava.net/beansoft/archive/2007/03/09/102812.html

    http://www.blogjava.net/beansoft/archive/2007/03/09/102812.html

  8. 2022.03.21飞扬的小鸟

    2022.03.21飞扬的小鸟 (题目来源:https://www.luogu.com.cn/problem/P1941 ) 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不 ...

  9. E.03.09 China Tried to Slow Divorces by Making Couples Wait. Instead, They Rushed.

    2021.03.09 文章目录 [课程导读] [英文原文] [外刊原文] [课程导读] 2021年1月1日起,中国开始实施<民法典>.其中有关"离婚冷静期"的规定引发了 ...

  10. 读计算机视觉life文章的总结(个人用2022.03.10)

    文章一 链接https://mp.weixin.qq.com/s/0czzSBXsVOdmGnBR6nyWIA 计算机视觉技能树 计算机视觉可以分为两大方向: 基于学习的方法和基于几何的方法.其中基于 ...

最新文章

  1. [转]CSS hack大全详解
  2. iOS APP提交上架最新流程
  3. python交作业的格式_python作业4
  4. CTF——MISC——zip伪加密总结
  5. 前端工程师后端转型实录
  6. spring依赖日志_Spring:设置日志记录依赖项
  7. 怎么用PHP修改文字大小,如何利用PHP和CSS改变网页文字大小
  8. windows的python切换环境_Windows下的python虚拟环境设置
  9. BZOJ2938[Poi2000]病毒——AC自动机
  10. select下拉框默认不能选择第一个选项的问题
  11. dd命令打包多个文件_linux下如何tar打包多个并列文件夹,如:将a文件夹 b文件夹 c文件夹,打包成d.tar文件...
  12. android 6.0 讯飞TTS
  13. 三星复印机载体初始化步骤_三星复印机的使用方法
  14. 【小睿精选·第七期】基于STM32的DIY蓝牙机械键盘
  15. 大牛讲解信号与系统(通俗易懂)
  16. 【推荐】我的FLASH情结2010——浅谈FLASH WEB GAME与创业(3)
  17. 巴贝奇的困境 by: 天涯ID--先生会算命V1
  18. 一次开发中并发删除插入死锁分析记录
  19. Hexo博客配置SSL证书
  20. ADS8685/ADS8681/ADS8689的stm32驱动程序

热门文章

  1. ML:MLOps系列讲解之《MLOps原则之测试》解读
  2. 成功解决ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C h
  3. ML之LiRLasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)
  4. 成功解决\PyInstaller\compat.py, line 378  out = out.decode(encoding) UnicodeDecodeError: utf-8 codec c
  5. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(TensorBoard可视化)
  6. Web应用开发技术-CSS
  7. python学习笔记 day16 内置函数(四)
  8. 如何一键部署项目代码自动更新
  9. python 2.7 简单模拟登陆网站
  10. 统一的定义导航栏的背景颜色(NavigationController)