当前位置:网站首页>BUUCTF-RSA4
BUUCTF-RSA4
2022-07-27 21:07:00 【[email protected]】
1.题目代码:
# N = 331310324212000030020214312244232222400142410423413104441140203003243002104333214202031202212403400220031202142322434104143104244241214204444443323000244130122022422310201104411044030113302323014101331214303223312402430402404413033243132101010422240133122211400434023222214231402403403200012221023341333340042343122302113410210110221233241303024431330001303404020104442443120130000334110042432010203401440404010003442001223042211442001413004
# c = 310020004234033304244200421414413320341301002123030311202340222410301423440312412440240244110200112141140201224032402232131204213012303204422003300004011434102141321223311243242010014140422411342304322201241112402132203101131221223004022003120002110230023341143201404311340311134230140231412201333333142402423134333211302102413111111424430032440123340034044314223400401224111323000242234420441240411021023100222003123214343030122032301042243
#
# N = 302240000040421410144422133334143140011011044322223144412002220243001141141114123223331331304421113021231204322233120121444434210041232214144413244434424302311222143224402302432102242132244032010020113224011121043232143221203424243134044314022212024343100042342002432331144300214212414033414120004344211330224020301223033334324244031204240122301242232011303211220044222411134403012132420311110302442344021122101224411230002203344140143044114
# c = 112200203404013430330214124004404423210041321043000303233141423344144222343401042200334033203124030011440014210112103234440312134032123400444344144233020130110134042102220302002413321102022414130443041144240310121020100310104334204234412411424420321211112232031121330310333414423433343322024400121200333330432223421433344122023012440013041401423202210124024431040013414313121123433424113113414422043330422002314144111134142044333404112240344
#
# N = 332200324410041111434222123043121331442103233332422341041340412034230003314420311333101344231212130200312041044324431141033004333110021013020140020011222012300020041342040004002220210223122111314112124333211132230332124022423141214031303144444134403024420111423244424030030003340213032121303213343020401304243330001314023030121034113334404440421242240113103203013341231330004332040302440011324004130324034323430143102401440130242321424020323
# c = 10013444120141130322433204124002242224332334011124210012440241402342100410331131441303242011002101323040403311120421304422222200324402244243322422444414043342130111111330022213203030324422101133032212042042243101434342203204121042113212104212423330331134311311114143200011240002111312122234340003403312040401043021433112031334324322123304112340014030132021432101130211241134422413442312013042141212003102211300321404043012124332013240431242
2.复现
中国剩余定理:

N1,N2,N3两两互质
c1=m^e mod n1
c2=m^e mod n2
c3=m^e mod n3
当m^e<n1,n2,n3时,所以当m和e足够小时才可以用这个方法
m^e=c1 mod n1
m^e=c2 mod n2
m^e=c3 mod n3
N=n1*n2*n3
N1=N/N1,N2=N/N2,N3=N/N3
根据中国剩余定理:
m^e=c1*N1*invert(N1,n1)+c2*N2*invert(N2,n2)+c3*N3*invert(N3,n3) mod N
invert(N2,n2)是N2对n2的逆元。
对m^e开e次根就可以求出m。
本题的c和n给的是5进制的数,不仔细看还看不出来。
import gmpy2
import libnum
N1 = int('331310324212000030020214312244232222400142410423413104441140203003243002104333214202031202212403400220031202142322434104143104244241214204444443323000244130122022422310201104411044030113302323014101331214303223312402430402404413033243132101010422240133122211400434023222214231402403403200012221023341333340042343122302113410210110221233241303024431330001303404020104442443120130000334110042432010203401440404010003442001223042211442001413004',5)
c1 = int('310020004234033304244200421414413320341301002123030311202340222410301423440312412440240244110200112141140201224032402232131204213012303204422003300004011434102141321223311243242010014140422411342304322201241112402132203101131221223004022003120002110230023341143201404311340311134230140231412201333333142402423134333211302102413111111424430032440123340034044314223400401224111323000242234420441240411021023100222003123214343030122032301042243',5)
N2 = int('302240000040421410144422133334143140011011044322223144412002220243001141141114123223331331304421113021231204322233120121444434210041232214144413244434424302311222143224402302432102242132244032010020113224011121043232143221203424243134044314022212024343100042342002432331144300214212414033414120004344211330224020301223033334324244031204240122301242232011303211220044222411134403012132420311110302442344021122101224411230002203344140143044114',5)
c2 = int('112200203404013430330214124004404423210041321043000303233141423344144222343401042200334033203124030011440014210112103234440312134032123400444344144233020130110134042102220302002413321102022414130443041144240310121020100310104334204234412411424420321211112232031121330310333414423433343322024400121200333330432223421433344122023012440013041401423202210124024431040013414313121123433424113113414422043330422002314144111134142044333404112240344',5)
N3 = int('332200324410041111434222123043121331442103233332422341041340412034230003314420311333101344231212130200312041044324431141033004333110021013020140020011222012300020041342040004002220210223122111314112124333211132230332124022423141214031303144444134403024420111423244424030030003340213032121303213343020401304243330001314023030121034113334404440421242240113103203013341231330004332040302440011324004130324034323430143102401440130242321424020323',5)
c3 = int('10013444120141130322433204124002242224332334011124210012440241402342100410331131441303242011002101323040403311120421304422222200324402244243322422444414043342130111111330022213203030324422101133032212042042243101434342203204121042113212104212423330331134311311114143200011240002111312122234340003403312040401043021433112031334324322123304112340014030132021432101130211241134422413442312013042141212003102211300321404043012124332013240431242',5)
e=3
N=N1*N2*N3
# c1=m^e mod N1
# c2=m^e mod N2
# c3=m^e mod N3
m=(c1*N//N1*gmpy2.invert(N//N1,N1)+c2*N//N2*gmpy2.invert(N//N2,N2)+c3*N//N3*gmpy2.invert(N//N3,N3))%N
m,f=gmpy2.iroot(m,3)
# print(m)259362307225540148883586283191025214233097658309244310540770399135748418469298031742173624766441014006294782333
print(libnum.n2s(int(m)))
# b'noxCTF{D4mn_y0u_h4s74d_wh47_4_b100dy_b4s74rd!}'这里只有3组c,n,但是组数多的话就不好一个一个的算了,所以写一个通用的脚本。
import gmpy2
import libnum
# n1,n2,n3......两两互质
n1 = int('331310324212000030020214312244232222400142410423413104441140203003243002104333214202031202212403400220031202142322434104143104244241214204444443323000244130122022422310201104411044030113302323014101331214303223312402430402404413033243132101010422240133122211400434023222214231402403403200012221023341333340042343122302113410210110221233241303024431330001303404020104442443120130000334110042432010203401440404010003442001223042211442001413004',5)
c1 = int('310020004234033304244200421414413320341301002123030311202340222410301423440312412440240244110200112141140201224032402232131204213012303204422003300004011434102141321223311243242010014140422411342304322201241112402132203101131221223004022003120002110230023341143201404311340311134230140231412201333333142402423134333211302102413111111424430032440123340034044314223400401224111323000242234420441240411021023100222003123214343030122032301042243',5)
n2 = int('302240000040421410144422133334143140011011044322223144412002220243001141141114123223331331304421113021231204322233120121444434210041232214144413244434424302311222143224402302432102242132244032010020113224011121043232143221203424243134044314022212024343100042342002432331144300214212414033414120004344211330224020301223033334324244031204240122301242232011303211220044222411134403012132420311110302442344021122101224411230002203344140143044114',5)
c2 = int('112200203404013430330214124004404423210041321043000303233141423344144222343401042200334033203124030011440014210112103234440312134032123400444344144233020130110134042102220302002413321102022414130443041144240310121020100310104334204234412411424420321211112232031121330310333414423433343322024400121200333330432223421433344122023012440013041401423202210124024431040013414313121123433424113113414422043330422002314144111134142044333404112240344',5)
n3 = int('332200324410041111434222123043121331442103233332422341041340412034230003314420311333101344231212130200312041044324431141033004333110021013020140020011222012300020041342040004002220210223122111314112124333211132230332124022423141214031303144444134403024420111423244424030030003340213032121303213343020401304243330001314023030121034113334404440421242240113103203013341231330004332040302440011324004130324034323430143102401440130242321424020323',5)
c3 = int('10013444120141130322433204124002242224332334011124210012440241402342100410331131441303242011002101323040403311120421304422222200324402244243322422444414043342130111111330022213203030324422101133032212042042243101434342203204121042113212104212423330331134311311114143200011240002111312122234340003403312040401043021433112031334324322123304112340014030132021432101130211241134422413442312013042141212003102211300321404043012124332013240431242',5)
e=3
n=[n1,n2,n3]
c=[c1,c2,c3]
N=1
for i in n:
N=N*i
m_e=0#m的e次方
for i in range(len(n)):
m_e=m_e+c[i]*N//n[i]*gmpy2.invert(N//n[i],n[i])
m_e=m_e%N
m,f=gmpy2.iroot(m_e,e)
flag=libnum.n2s(int(m))
print(flag)
# b'noxCTF{D4mn_y0u_h4s74d_wh47_4_b100dy_b4s74rd!}'总结:当题目给出多组n,c,而且多组n两两互质,m^e<每一个n时,就可以用这个方法。
版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_61774705/article/details/124696493
边栏推荐
- 钉钉报警工具
- 2022/7/24-7/25
- 如果我们是那晚负责修复 B 站崩了的开发人员
- Join hands with Changjiang storage, jiangbolong launches the world's smallest expansion card
- Redis hash underlying data structure
- 请求合并哪家强——接口请求合并的3种技巧,性能直接爆表
- 【JS 逆向百例】某公共资源交易网,公告 URL 参数逆向分析
- Lua basic grammar learning
- Socket interaction process of three handshakes
- Character stream learning 14.3
猜你喜欢

org.junit.runners.model.InvalidTestClassError: Invalid test class ‘com.zhj.esdemo.MysqlTests‘: 1.

File&递归14.1

字符流学习14.3

C#委托用法--控制台项目,通过委托实现事件

Interviewer: let's talk about the specific process of network data transmission

TCP的粘包拆包问题+解决方案

Redis 哈希Hash底层数据结构

给网站套上Cloudflare(以腾讯云为例)

CaEGCN: Cross-Attention Fusion based Enhanced Graph Convolutional Network for Clustering 2021

重新定义分析 - EventBridge 实时事件分析平台发布
随机推荐
为什么 Redis 集群要使用反向代理? 看这篇就明白了
[December Haikou] the 6th International Conference on ships, marine and Maritime Engineering in 2022 (naome 2022)
Comparison between virtual memory and cache
Error:svn: E155010: ‘/Users/.../Desktop/wrokspace/xxx‘ is scheduled for addition, but is missing
Socket interaction process of four waves
Elk log analysis system installation and deployment
ELK日志分析系统安装和部署
smartRefresh嵌套多个RecycleView滑动冲突及布局显示不全
Redis 哈希Hash底层数据结构
请求合并哪家强——接口请求合并的3种技巧,性能直接爆表
Using the optical fingerprint scheme under the huiding screen, Samsung Galaxy a71 5g is listed
[CVA valuation training camp] how to quickly read the annual reports of listed companies - Lesson 4
你的列表很卡?这4个优化能让你的列表丝般顺滑
Why do I need to wait for 2msl?
Nature review: preferential effects in the formation of microbial communities
Socket interaction process of three handshakes
Nail alarm tool
Date的使用
Flutter pull_ to_ refresh-1.6.0/lib/src/internals/slivers. dart:164:13: Error: Method not found: ‘descr
三次握手的Socket交互流程