最近做密码学rsa的题目,搜集了很多情况下的rsa解题脚本,记录一下

import gmpy2
import rsa
from binascii import a2b_hex
import libnum
from Crypto.Util.number import long_to_bytes#---------------------------------------------------------------------------------------------------------------# p 和 q:两个大的质数,是另一个参数N的的两个因子。
# N:大整数,可以称之为模数
# e 和 d:互为无反数的两个指数
# c 和 m:密文和明文
# (N, e):公钥
# (N, d):私钥
# pow(x, y, z):效果等效pow(x, y)1 % z, 先计算x的y次方,如果存在另一个参数z,需要再对结果进行取模。
# 密钥长度:n以二进制表示的的位数,例如密钥长度为512代表n用二进制表示的长度为512bit。1# 要因式分解的数过长的话记得试试yafu!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#---------------------------------------------------------------------------------------------------------------
#
#  1、题中给了.pem文件和.enc文件,或直接给了公钥文件和加密文件# num = "C0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD"           #改,解密公钥文件得到的模数
# N = int(num,16)                                                                    #将十六进制的num转换为int型
# E = 65537                                                                          #改,解密公钥文件得到的指数
# p = 285960468890451637935629440372639283459                                        #改,模数分离网站得到p和q
# q = 304008741604601924494328155975272418463
# D = int(gmpy2.invert(E,(p-1)*(q-1)))                                               #通过前三个参数求出d
# privkey = rsa.PrivateKey(N, E, D, p, q)
# with open("E:\\BUU\\41c4e672-98c5-43e5-adf4-49d75db307e4\\output\\flag.enc", "rb+") as file:   #,改,加密文件路径
#     text = file.read()
# message = rsa.decrypt(text,privkey)
# print(message)#--------------------------------------------------------------------------------------------------------------
#
#  2、已知p、q、e求解d# p = 473398607161
# q = 4511491
# e = 17
# n = (p-1)*(q-1)
# d = gmpy2.invert(e,n)
# print("d is:\n%s"%d)#--------------------------------------------------------------------------------------------------------------
#
#  3、已知p、q、e、c(密文)求解明文m# p = 135406272915839663948982508259168339196413423033707377351582717408135201161291947411690398070725136534418000750068523816458786100037135542069749803825803176245899663700018918204457909082934286787984577920819722071614325832117549949176386055577917668392717683643933279741971553133044965672217515958006018425207
# q = 141499967777554698157827398588073190546048161142442371043319091793202159392937117317909316830021492737369017974252412948824878182004132437165872836769442232191985031274210566004860441962404283572352416239402475111512429494403506484997417885317393735452834730615296387016523054424102807140640940320044291046001
# e = 894
# c = 285599740642531890154220175592437844999990780403815630307661459001713176317615138628516144325413153232796819897801881107425865913054728954677352027457699314702416360013205027660502210085125607181176890689285963882325311472422689397465349673391413548284592577544566069076266866047930427530566329183924506279416975701558074448835820462125272973167295304050434568652119366359340574659484793805164709585039574539722702352716480226900050322661650017379886614397585534285036799547237613356555628012895080401615470840003601931382810917605930301582006344272146554650976008053460139711071700513559719126632374724028665834623# # 已知的p和q求出n
# n = p * q
# # 根据已知的条件求出d
# d = gmpy2.invert(e,(p-1)*(q-1))
# # 求出明文
# m = pow(c,d,n)
# print("m=\n%s"%m)# p = 2514358789
# q = 31443395202510761944395342804935530268511778203407106685510807910751132207418762315913320460522625396976302493859615536262323881954321051711191343592497195539660311
# e = 65537
# c = 31573591986915001857640263466939164206307247748465148395978810720215094970707002043721991055789084518831540652652824225863275289979959264564070907438540016782921324316795681
# # 已知的p和q求出n
# n = p * q
# # 根据已知的条件求出d
# d = gmpy2.invert(e,(p-1)*(q-1))
# # 求出明文
# m = pow(c,d,n)
# print("m=\n%s"%m)# string = long_to_bytes(m)  # m明文
# print(string)#---------------------------------------------------------------------------------------------------
#
#   4、n分解出三个素数
# # import libnum
# import gmpy2
# n= 79059977083433369161977159472257563109008119475755288439774758824887836857424336032518651862088590700241980200158542855762122262156445632897757444422514158062996501037323379
# e= 65537
# c= 31573591986915001857640263466939164206307247748465148395978810720215094970707002043721991055789084518831540652652824225863275289979959264564070907438540016782921324316795681# #分解n
# #yafu-x64.exe  factor()
# p=2514358789
# q =2930880917
# r =10728308687033142242263042720863820844383961098139391476856378846439202568058060175330323889963293720874263174254928466703829537388987357384056877938482683# phi_n=(p-1)*(q-1)*(r-1)
# d=gmpy2.invert(e,phi_n)
# m=pow(c,d,n)
# print(m)
# print(libnum.n2s(int(m))) #------------------------------------------------------------------------------------------------------------------------
#
#   5、e为合数894# import libnum
# c=285599740642531890154220175592437844999990780403815630307661459001713176317615138628516144325413153232796819897801881107425865913054728954677352027457699314702416360013205027660502210085125607181176890689285963882325311472422689397465349673391413548284592577544566069076266866047930427530566329183924506279416975701558074448835820462125272973167295304050434568652119366359340574659484793805164709585039574539722702352716480226900050322661650017379886614397585534285036799547237613356555628012895080401615470840003601931382810917605930301582006344272146554650976008053460139711071700513559719126632374724028665834623
# p=135406272915839663948982508259168339196413423033707377351582717408135201161291947411690398070725136534418000750068523816458786100037135542069749803825803176245899663700018918204457909082934286787984577920819722071614325832117549949176386055577917668392717683643933279741971553133044965672217515958006018425207
# q=141499967777554698157827398588073190546048161142442371043319091793202159392937117317909316830021492737369017974252412948824878182004132437165872836769442232191985031274210566004860441962404283572352416239402475111512429494403506484997417885317393735452834730615296387016523054424102807140640940320044291046001
# e=149                      #改e
# n=p*q
# d =gmpy2.invert(e,(p-1)*(q-1))
# flag8 = pow(c,d,n)
# m=gmpy2.iroot(flag8,6)[0]    #改6
# s= long_to_bytes(m)
# print(s)#---------------------------------------------------------------------------------------------------------------------
#      6、
#sage
# from hashlib import sha256
# def related_message_attack(c1, c2, diff, e, n):
#     PRx.<x> = PolynomialRing(Zmod(n))
#     g1 = x^e - c1
#     g2 = (x+diff)^e - c2
#     def gcd(g1, g2):
#         while g2:
#             g1, g2 = g2, g1 % g2
#         return g1.monic()
#     return -gcd(g1, g2)[0]
# n = 27262030738190162906068533309218248319312037416856794814532459866130196673561833084739048171769479893806671499522643803412108279907223895517897969906253626028270289028646596897429641138913001561947557784840311014399973312098056896539904624036584153785225626096007313018814076860235378686567457599895712604364100507424939342862464483596795761725357279364545154915110900098124905389351969357103586063992040096368146580315262263546850581515833590884397726108478477798668261762306189036525841356592859315437201733146083995028221597538824801113980100295046731791678895520928441645173205511865657977068061078456941189550383
# e = 3
# c2 = 80256065280425989347153660555632253204654757632704797390559450985825600409910703812294413750536361555897348650491697548574007864446117693097103136799284683292648287334023253488891301144881769557674366138889636475162525325855368132832237345279798028008137655682278413635753791609965810603989005785747744993045461207072415730041608172272077090225741385971
# c1 = 80256065280425989347153660555632253204654757632704797390559450985825600409910703812294413750536361555897348650491699334745453065435184774282609871793525447798655880850590288431173204818294305809864531293135689257716648980215360552397800418527073621708108066406898267720300730094465977262440649283179655484278496374936325875186126245693549228697550672467
# diff = 32
# m = related_message_attack(c2, c1, diff, e, n)
# flag = ('%x' % m).decode('hex')
# print(flag)#------------------------------------------------------------------------------------------------------------------#   7、共模攻击e1e2不互素# from gmpy2 import gcdext, iroot
# from Crypto.Util.number import long_to_bytes# n=116723130577860346903090372930003062572661675922668883251006909490469612579486914840228708163947822937255734093205496730087959135664783112024031289713137153444344425382458451842379062515019623524183259555236476505008400477052145242324243554353330751238339048413282732278012730220440805076899025071521619097997
# c1=45722651786340123946960815003059322528810481841378247280642868553607692149509126962872583037142461398806689489141741494974836882341505234255325683219092163052843461632338442529011502378931140356111756932712822516814023166068902569458299933391973504078898958921809723346229893913662577294963528318424676803942288386430172430880307619748186863890050113934573820505570928109017842647598266634344447182347849367714564686341871007505886728393751147033556889217604647355628557502208364412269944908011305064122941446516990168924709684092200183860653173856272384
# c2=13908468332333567158469136439932325992349696889129103935400760239319454409539725389747059213835238373047899198211128689374049729578146875309231962936554403287882999967840346216695208424582739777034261079550395918048421086843927009452479936045850799096750074359160775182238980989229190157551197830879877097703347301072427149474991803868325769967332356950863518504965486565464059770451458557744949735282131727956056279292800694203866167270268988437389945703117070604488999247750139568614939965885211276821987586882908159585863514561191905040244967655444219603287214405014887994238259270716355378069726760953320025828158
# e1 = 42
# e2 = 3# g,x,y=gcdext(e1,e2)
# m=pow(c1,x,n)*pow(c2,y,n)%n
# m=iroot(m,2)[0]
# print(long_to_bytes(m))#--------------------------------------------------------------------------------------------------------------------
#
#   8、已知c(密文)、n、e求解明文(全十六进制)# #n的16进制转10进制
# n = int(0x2c404d87c6244ad1b44aabd95244d5deb3c93cf3bd798ba4624cd9f89c95e246aad9cbda463292c6ef3140d97c5c1e691c54095e75f56d61a1640decc83caccce52c957282949bed20105d4d67c2b4c3d4c15829657e246d899917022e6d4d07c4382bcc3b83376d7250d85088dc73b24d030f4625fb37c5405cee04ace903d68747035fd55946ad2eb807db0b0508fc24fd54185614ab18c83127b7aa48f9927cc1258f819e02c5d2db4074736e374616664a2b49d1ff3a3effc4af201f235af5193a6e9a0192bb39aad91c5291a1b53973a85bec5dbbb3350e6c344b445c71212938d56a0c99e571bd15356979c394f84398143033fc44eb40558f253bb2445)
# #通过在线分解出的p和q,以及给定的e,求出d
# print(n)
# print("\n\n\n")
# e = gmpy2.mpz(int(0x10001))
# p = 57970027
# q = 518629368090170828331048663550229634444384299751272939077168648935075604180676006392464524953128293842996441022771890719731811852948684950388211907532651941639114462313594608747413310447500790775078081191686616804987790818396104388332734677935684723647108960882771460341293023764117182393730838418468480006985768382115446225422781116531906323045161803441960506496275763429558238732127362521949515590606221409745127192859630468854653290302491063292735496286233738504010613373838035073995140744724948933839238851600638652315655508861728439180988253324943039367876070687033249730660337593825389358874152757864093
# d = hex(gmpy2.invert(e,(q-1)*(p-1)))
# print("d的十六进制为:\n%s"%d)
# #通过n,d,e,c求解明文
# d = 0x9186c78d098af6815622ea9901cf84a89ead578a6dbdded7d7fc63531756239dc586501216fc2e4bd1a8cee7e62284d16d91195f356d733a52dff011ebc3bf1e5d62af54d0455ea2f6ec948f45f34931f5b0b4478b16c66951a95d2f069a6c8867a6bc673c8e40052a54dbc5c1aeacbbfae7cad150a4f41ef4a02b1c97d70636ae187ed3c45f2551696a6a1172ae4089e033fb4853057c0f1e227d71ccf24fb27073ca4fe4ac3744dfed2cd7763c47ac4ae4d42820a19d68961bc103bb9016197463875169d062b45807e2e86aa17fa65e3088cc75ef35f984d0ca92d4c9270c2e694eb1f5df16b7ebe32b5c1d26086d6aac5fe327288f2904cb54164db39151
# e = 0x10001
# c = 0x3dbf00a02f924a70f44bdd69e73c46241e9f036bfa49a0c92659d8eb0fe47e42068eaf156a9b3ee81651bc0576a91ffed48610c158dc8d2fb1719c7242704f0d965f8798304925a322c121904b91e5fc5eb3dc960b03eb8635be53b995217d4c317126e0ec6e9a9acfd5d915265634a22a612de962cfaa2e0443b78bdf841ff901423ef765e3d98b38bcce114fede1f13e223b9bd8155e913c8670d8b85b1f3bcb99353053cdb4aef1bf16fa74fd81e42325209c0953a694636c0ce0a19949f343dc229b2b7d80c3c43ebe80e89cbe3a3f7c867fd7cee06943886b0718a4a3584c9d9f9a66c9de29fda7cfee30ad3db061981855555eeac01940b1924eb4c301
# n = 0xee290c7a603fc23300eb3f0e5868d056b7deb1af33b5112a6da1edc9612c5eeb4ab07d838a3b4397d8e6b6844065d98543a977ed40ccd8f57ac5bc2daee2dec301aac508f9befc27fae4a2665e82f13b1ddd17d3a0c85740bed8d53eeda665a5fc1bed35fbbcedd4279d04aa747ac1f996f724b14f0228366aeae34305152e1f430221f9594497686c9f49021d833144962c2a53dbb47bdbfd19785ad8da6e7b59be24d34ed201384d3b0f34267df4ba8b53f0f4481f9bd2e26c4a3e95cd1a47f806a1f16b86a9fc5e8a0756898f63f5c9144f51b401ba0dd5ad58fb0e97ebac9a41dc3fb4a378707f7210e64c131bca19bd54e39bbfa0d7a0e7c89d955b1c9f
# # flag = hex(pow(c,d,n))[1:].decoding("hex")
# flag = a2b_hex(hex(pow(c,d,n))[2:])
# print(flag)#----------------------------------------------------------------------------------------------------------------------
#
#   9、已知c(密文)、e,求解明文#python2# from Crypto.PublicKey import RSA# keypair = RSA.generate(1024)
# keypair.p = 258631601377848992211685134376492365269
# keypair.q = 286924040788547268861394901519826758027
# keypair.e = 65537
# keypair.n = keypair.p * keypair.q
# phi_n = (keypair.p-1) * (keypair.q-1)# i = 1
# while (True):
#         x = (phi_n * i ) + 1
#         if (x % keypair.e == 0):
#             keypair.d = x / keypair.e
#             break
#         i += 1# private = open('private.pem','w')
# private.write(keypair.exportKey())
# private.close()

除了上边的这些,推荐b站的一位密码学up主,里面有很多类型的密码学脚本和讲解,

关于RSA共模攻击e1,e2不互素的解法相关推荐

  1. RSA共模攻击(包括原理)

    RSA工作原理 RSA的工作原理,RSA涉及的几个参数 明文=>m 密文=>c 模n,负责计算出两个质数p和q p和q计算欧拉函数值Φ(n) 欧拉函数Φ(n)=> Φ(n)=(p-1 ...

  2. 【ctf学习】RSA共模攻击

    已知n,c1,e1,c2,e2 比如: from gmpy2 import * from Crypto.Util.number import *m=bytes_to_long(flag)e1=7001 ...

  3. CTF-RSA共模攻击 和 非共模攻击解密脚本

    给定两个不同的n的时候一定要看看n1,n2有没有最大公约数(素数),如果有,那么该最大公约数就是两者共同的p给定两个相同的n的时候,那就要考虑共模攻击了 共模攻击 有两组RSA密码 提取公钥信息 fr ...

  4. CTF-RSA共模攻击

    1.共模攻击原理 一号选手和二号选手对同一段明文进行加密. 如果此时有一个攻击者,同时监听了一号选手和二号选手接收到的密文,.因为模数不变,以及所有的公钥都是公开的,那么利用共模攻击,就可以在不知道, ...

  5. [密码学] RSA同模攻击与选择密文攻击

    文章目录 同模攻击 选择密文攻击 RSA-OAEP 同模攻击 选择密文攻击 RSA-OAEP

  6. 低解密指数攻击_CTF中RSA的一些攻击思路

    本文为看雪论坛优秀文章看雪论坛作者ID:丿feng本文简略总结了前人的一些RSA攻击思路,代码或来源于网上或本人原创.并已在GitHub上开源,github地址:https://github.com/ ...

  7. [NPUCTF2020]共 模 攻 击

    开始时我们便直接从题目中便可知此题一定考察了rsa中的共模攻击.当我们下载好题目给予我们的两个文件后,可以看到以下内容: from gmpy2 import * from Crypto.Util.nu ...

  8. buu [NPUCTF2020]共 模 攻 击 1

    题目描述: task: hint: 题目分析: 先看hint(提示)这一部分,标题已经提示了是共模攻击,看到有e1,e2,c1,c2,n也可以想到是共模攻击,之后得到c,继续往下做 此时有点不知如何下 ...

  9. 【愚公系列】2022年04月 密码学攻击-RSA之共模和模不互素

    一.RSA之共模和模不互素 RSA中N模数存在有共模和不共模,你能通过简单的算法把模数中的Q,P分离出来吗 我们的任务分为2个部分: 了解共模的原理,获得flag. 了解模不互素的原理,获得flag ...

最新文章

  1. Java并发编程之CAS
  2. VS2008 各种杂七杂八技巧
  3. 陶哲轩实分析命题10.1.7
  4. 单纯形法表格法例题详解_优化 |运筹学线性规划单纯形法之求解
  5. Notebook中?的trick
  6. Python学习笔记之函数式编程
  7. VTK:图片之ImageLaplacian
  8. 【解题报告】Leecode 372. 超级次方——Leecode每日一题系列
  9. 分库分表下极致的优化
  10. doxygen如何生成JAVA文档_有用Doxygen生成文档的吗?发一篇Doxygen的使用文档给大家,从网上搜来的。...
  11. uFrame近况(2016年4月8日更新)
  12. apache反向代理实战
  13. 编辑距离及编辑距离算法 1
  14. 计算机换显卡,老平台只换显卡 这样升级行不行?
  15. python数据组织存在维度吗_用Python 爬取蔡徐坤新浪微博 10 万转发数据,从数据的维度看看存在多少假流量...
  16. 与《新走遍美国》的邂逅
  17. 【OpenCV 例程 300篇】219. 添加数字水印(盲水印)
  18. 【scratch】class_1_界面介绍
  19. spoolsv病毒的清除
  20. ASP.NET 母版页小实例(点击显示文本内容)

热门文章

  1. 南通大学python期末考试试卷答案_南通大学自动评教脚本(python)
  2. C语言每日一练——第85天:三色球问题
  3. 解决方法:CC2640R2F从7x7改成5x5封装,主机连接失败
  4. android仿最新版本微信相册--附源码
  5. Unity手游制作记-制作通用镜头控制器
  6. 电主轴编码器测试工具VS sensorikHCU500/DCMU-BOX,海德汉PWM21/PWT101,LENORD+BAUER(L+B)211BSO/211CS04E2M使用对比
  7. 黑马程序员 python 基础版 哪个老师_(看黑马程序员Python基础班视频挺好,犹豫该不该报班?)...
  8. Android自动化测试技术——Espresso的使用
  9. 开源四轴飞行器CC3D的稳定模式和PID算法简介
  10. Android应用声明Open Source Licenses