[RoarCTF2019]babyRSA(威尔逊定理)

题目

import sympy
import randomdef myGetPrime():A= getPrime(513)print(A)B=A-random.randint(1e3,1e5)print(B)return sympy.nextPrime((B!)%A)
p=myGetPrime()
#A1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467234407
#B1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467140596q=myGetPrime()
#A2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858418927
#B2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858351026r=myGetPrime()n=p*q*r
#n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534649628330416631255660901307533909900431413447524262332232659153047067908693481947121069070451562822417357656432171870951184673132554213690123308042697361969986360375060954702920656364144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432896758405898709010342467882264362733
c=pow(flag,e,n)
#e=0x1001
#c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009998932067080383977560299708060476222089630209972629755965140317526034680452483360917378812244365884527186056341888615564335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684356427316905122995759825241133872734362716041819819948645662803292418802204430874521342108413623635150475963121220095236776428
#so,what is the flag?

解题思路

这道题求解的重点在sympy.nextPrime((B!)%A)

因为A和B题目都给我们了,所以难点就在于求B的阶乘的模,而B又很大,计算阶乘不大现实

好在有一个定理可以解决这个问题,即威尔逊定理

威尔逊定理

当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )

借助此定理,各个参数都可以计算出来

例如,p = sympy.nextPrime((B1!)%A1)

由威尔逊定理,( A1 -1 )! ≡ -1 ( mod A1 )

即B1! * k = ≡ -1 ( mod A1 ),其中k = (A1-1)! / (B1)!,也就是B1之后的数字之积

两边同时乘上k的逆元,B1! = -k-1 (mod A1)

从而可计算p = sympy.nextPrime((B1!)%A1)

还有一点需要注意,这里模数n由三个素数p, q, r相乘得到,但是类似的,其欧拉函数phi(n) = (p-1)(q-1)(r-1)

附上代码

import gmpy2
import sympy
import binascii
#p = sympy.nextPrime((B!)%A)
def getPrime(A, B):k = 1for i in range(B+1, A):k = (k*i) % Ares = (-gmpy2.invert(k, A)) % Areturn sympy.nextprime(res)if __name__ == '__main__':A1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467234407B1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467140596A2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858418927B2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858351026n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534649628330416631255660901307533909900431413447524262332232659153047067908693481947121069070451562822417357656432171870951184673132554213690123308042697361969986360375060954702920656364144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432896758405898709010342467882264362733e=0x1001c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009998932067080383977560299708060476222089630209972629755965140317526034680452483360917378812244365884527186056341888615564335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684356427316905122995759825241133872734362716041819819948645662803292418802204430874521342108413623635150475963121220095236776428p = getPrime(A1, B1)q = getPrime(A2, B2)r = n//(p*q)d = gmpy2.invert(e,(p-1)*(q-1)*(r-1))m = gmpy2.powmod(c, d, n)flag = binascii.unhexlify(hex(m)[2:])print(flag)

运行结果

b’RoarCTF{wm-CongrAtu1ation4-1t4-ju4t-A-bAby-R4A}’

flag

flag{wm-CongrAtu1ation4-1t4-ju4t-A-bAby-R4A}

BUU-RSA [RoarCTF2019]babyRSA(威尔逊定理)相关推荐

  1. 威尔逊定理 ---- [hdu-6608] Fansblog 威尔逊定理 质数的密度分布 快速乘优化快速幂防止中间爆longlong

    题目链接 题目大意:就是给你一个质数P∈[2,1e14]P\in[2,1e14]P∈[2,1e14]求一个质数Q<PQ<PQ<P解出Q!modPQ!modPQ!modP 解题思路: ...

  2. 关于素数常用结论--威尔逊定理、欧拉定理、费马小定理、米勒罗宾算法

    再需要判定的数比较大时,用枚举法肯定不行的,但目前数学界也没有任何一种又快又准确的判定素数的方法,并且也证明了素数不存在任何一种通项表达式.但作为初等数论中最大的一部分内容,数学家们对素数性质进行了大 ...

  3. HDU- 2973 YAPTCHA(威尔逊定理)

    题目链接:点击查看 题目大意:求解: 题目分析:我们需要提前知道威尔逊定理:如果p是素数,则 所以我们可以分情况讨论: 当3k+7是素数时,,因为威尔逊定理,,所以一定是一个整数,我们设为x,这样一来 ...

  4. 数学--数论--四大定理之威尔逊定理

    威尔逊定理 当 (p−1)!≡−1(modp)(p−1)!≡−1(modp)(p−1)!≡−1(modp)时,ppp为素数. p∣(p−1)!+1p∣(p−1)!+1p∣(p−1)!+1 即(p−1) ...

  5. HDU - 2973威尔逊定理

    核心问题就是那个等式 我们观察到等式可以写成(n-1)!-1/n-[(n-1)!/n]的形式,这样就应该联想到威尔逊定理了. 回顾一下威尔逊定理的内容:当且仅当n为素数的时候n|(n-1)!-1,n为 ...

  6. HDU5391威尔逊定理

    威尔逊定理 当且仅当p为素数,p | (p-1)!+1 若p为合数,则p=a*b;如果a!=b,那么p|(p-1)!, 如果a=b,如果p为4,那么p|(p-1)!=2,如果p大于4,那么sqrt§和 ...

  7. 提高级:初等数论 威尔逊定理

    数论四大定理之威尔逊定理 数论四大定理之威尔逊定理 - 简书 威尔逊定理及其证明 - clockwhite - 博客园 数论四大定理之威尔逊定理_L__ear的博客-CSDN博客_威尔逊定理 威尔逊定 ...

  8. HDU6608 Fansblog【Miller_Rabin素性测试算法+威尔逊定理】

    Fansblog Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

  9. 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明

    一.威尔逊定理 若p为质数,则 p|(p-1)!+1 亦:(p-1)! ≡ p-1 ≡ -1(mod p) 例题: HDU 2973 YAPTCHA (威尔逊定理及其逆定理) 解题报告见http:// ...

最新文章

  1. oracle数据库风险链接,数据库的风险主要来源
  2. powerdesigner基本使用 - 创建概念模型
  3. 源码-0105-Autoresizing
  4. 在线RGB和HEX十六进制颜色互转工具
  5. 《梦幻西游》打响反盗号战役:为2亿玩家提供360安全武器
  6. 2015级C++第7周项目 友元、共享数据保护、多文件结构
  7. 翻译:Vim从入门到精通 Mac OS
  8. 《Python学习手册》——使用入门
  9. 计算机中插入背景图片怎样操作,如何将图片设置为Word页面背景?
  10. Can总线基本关注事项(仲裁、电气、阻抗计算、负载率)
  11. git/github入门
  12. 复习两个月能考上研吗?
  13. X5腾讯内核 安装线上内核本来能用,突然报115错误问题记录
  14. 计算机开机桌面黑屏怎么办,小编教你电脑启动后黑屏该怎么办
  15. 最大子矩阵和问题java_最大子矩阵
  16. kotlin基础教程:<6>map集合
  17. SQL注入漏洞测试(报错盲注)笔记
  18. A股非金融上市公司全要素生产率(2000-2021年)
  19. mybatis-plus设置id自增,插入数据。
  20. 央视棒打百度的三个现象

热门文章

  1. Tmw去掉名字服务器显示,7.1WOW大秘境福利:老司机分享溢出与死疽TMW监视
  2. 什么是 PM,什么是 SCM,和 NVM 什么关系?
  3. java web 开发是做什么用的?
  4. hdu 5761 Rower Bo 物理题
  5. tomcat下载与安装win11
  6. 系统可用性SLA指标
  7. 四、点对点的传输层【网络全景图分析系列】
  8. webcam.c和f_uvc.c驱动分析(一)
  9. n (n - 1)的用途
  10. python3判断字典中的key是否存在_python3判断key存在字典中的方法是什么