当前位置: 首页 > news >正文

扩展中国剩余定理脚本(恢复密文c)

1.题目

from Crypto.Util.number import *
import random
# from secret import flag
flag=''
table='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
pad=100-len(flag)
for i in range(pad):flag+=random.choice(table).encode()
e=343284449
m=bytes_to_long(flag)
assert m>(1<<512)
assert m<(1<<1024)
p=getPrime(512)
q=getPrime(512)
r=getPrime(512)
print('p=',p)
print('q=',q)
print('r=',r)
n1=p*q
n2=q*r
c1=pow(m,e,n1)
c2=pow(m,e,n2)
print('c1=',c1)
print('c2=',c2)p= 11820891196647569262137841192985418014377132106496147254821784946481523526822939129065042819464351666077658751406165276121125571355594004514547517855730743
q= 10450390015864176713581330969519712299844487112687677452105216477861582967322473997670559995588440097951786576039009337782247912476227937589298529580432797
r= 9484954066160968219229920429258150817546418633451929876581842443665029377287119340232501682142185708534413073877473741393278935479791561681402673403009771c1= 69574855207460025252857869494766338442370688922127811393280455950372371842144946699073877876005649281006116543528211809466226185922844601714337317797534664683681334132261584497953105754257846471069875622054326463757746293958069752489458646460121725019594141157667480846709081917530190233900184428943585065316
c2= 66183492015178047844987766781469734325646160179923242098082430373061510938987908656007752256556018402101435698352339429316390909525615464024332856855411414576031970267795270882896721069952171988506477519737923165566896609181813523905810373359029413963666924039857159685161563252396502381297700252749204993228# e是q-1的因子

2.解题思路

前面大致看一下,就随机从 table中选择的字母把flag填充到100字节长度然后转换成长整数m.

重要信息是:

n1=p*q
n2=q*r
c1=pow(m,e,n1)
c2=pow(m,e,n2)

我们可以通过解这个同余方程组来恢复c:(转扩展中国剩余定理(ExCRT)-CSDN博客)

gcd(n1,n2)=q

由CRT合并后得到x=m^e mod (lcm(n1,n2))即x=m^e mod(p*q*r)不就是c吗

直接套扩展中国剩余定理脚本求出c,再进行正常的rsa求解(在这个过程中q没有直接用于解密,n=pr)

3.脚本

先求出c:

p= 11820891196647569262137841192985418014377132106496147254821784946481523526822939129065042819464351666077658751406165276121125571355594004514547517855730743
q= 10450390015864176713581330969519712299844487112687677452105216477861582967322473997670559995588440097951786576039009337782247912476227937589298529580432797
r= 9484954066160968219229920429258150817546418633451929876581842443665029377287119340232501682142185708534413073877473741393278935479791561681402673403009771
n1=p*q
n2=q*r
#print(n1)
#print(n2)
#123532923340062498196987596321158778953792410828984481020115457263717668204473703015542790129153489530621245935519745815888671340181570426743315007214814995259450485202769218431488347959428261030109200094413998290111042600270343912239267830450410094909181939564200869305441814656652376159995048386284638378171
#99121469273938908094337559030886762245366008335524496490212577254038642294316299795376895228431188701683790748101815366283781320808991079605856804571942415812705959110308025365792393315242314372015543762383660712225873022827021182760217750969535414533002246962138257379447348529580050968085829513328599859487
import gmpy2
from Crypto.Util.number import *
"""扩展欧几里得"""
def exgcd(a, b):if 0 == b:return 1, 0, ax, y, q = exgcd(b, a % b)x, y = y, (x - a // b * y)return x, y, q"""扩展中国剩余定理"""def CRT(n, a, m):if n == 1:return a[0], m[0]for i in range(1, n):x, y, d = exgcd(m[0], m[i])if (a[i] - a[0]) % d != 0:return -1, -1t = m[i] // dx = (a[i] - a[0]) // d * x % ta[0] = x * m[0] + a[0]m[0] = m[0] * m[i] // da[0] = (a[0] % m[0] + m[0]) % m[0]return a[0], m[0]
c1= 69574855207460025252857869494766338442370688922127811393280455950372371842144946699073877876005649281006116543528211809466226185922844601714337317797534664683681334132261584497953105754257846471069875622054326463757746293958069752489458646460121725019594141157667480846709081917530190233900184428943585065316
c2= 66183492015178047844987766781469734325646160179923242098082430373061510938987908656007752256556018402101435698352339429316390909525615464024332856855411414576031970267795270882896721069952171988506477519737923165566896609181813523905810373359029413963666924039857159685161563252396502381297700252749204993228# 假设的题目数据(具体根据题目来改变)
n = 2# 同余方程个数
m = [123532923340062498196987596321158778953792410828984481020115457263717668204473703015542790129153489530621245935519745815888671340181570426743315007214814995259450485202769218431488347959428261030109200094413998290111042600270343912239267830450410094909181939564200869305441814656652376159995048386284638378171,99121469273938908094337559030886762245366008335524496490212577254038642294316299795376895228431188701683790748101815366283781320808991079605856804571942415812705959110308025365792393315242314372015543762383660712225873022827021182760217750969535414533002246962138257379447348529580050968085829513328599859487]# 模数
a = [69574855207460025252857869494766338442370688922127811393280455950372371842144946699073877876005649281006116543528211809466226185922844601714337317797534664683681334132261584497953105754257846471069875622054326463757746293958069752489458646460121725019594141157667480846709081917530190233900184428943585065316,66183492015178047844987766781469734325646160179923242098082430373061510938987908656007752256556018402101435698352339429316390909525615464024332856855411414576031970267795270882896721069952171988506477519737923165566896609181813523905810373359029413963666924039857159685161563252396502381297700252749204993228]# 余数# 使用CRT求解基础解和模数
x0, mod = CRT(n, a, m)
print(x0)

再求m:

import libnum
c=1051311603595400257980451542641726560928968569258042231276292652088507209347204465348483100080899623360705698249443255030368048979130482813052608650445300611553758759647722097778171873596181791974080589234136090632966294575063306439633769753905530026312180583106024810580642209905594594119077985110929675466498207370604560182924468112540068499274911327513697378581931822685826876372554425845071592347470781982215295908151280216722253883169708944885906780090210923
p= 11820891196647569262137841192985418014377132106496147254821784946481523526822939129065042819464351666077658751406165276121125571355594004514547517855730743
q= 10450390015864176713581330969519712299844487112687677452105216477861582967322473997670559995588440097951786576039009337782247912476227937589298529580432797
r= 9484954066160968219229920429258150817546418633451929876581842443665029377287119340232501682142185708534413073877473741393278935479791561681402673403009771
e=343284449
n=p*r
phi=(p-1)*(r-1)
d=libnum.invmod(e,phi)
m=pow(c,d,n)
print(libnum.n2s(m))
#b'moectf{Th1s_iS_Chinese_rEm41nDeR_The0rEm_CRT!}YWMZSTyfRvhjTCJuQCwALQBcWHFCgTDIZWJaxRUzBPCmFOnbDTRBau'

http://www.xdnf.cn/news/1386379.html

相关文章:

  • 匠心传承,古韵新生——记木雕名家龙巍的艺术人生
  • Android 打包适配15 版本(api 35)问题处理
  • 【观成科技】蔓灵花User下载者加密通信分析
  • 微硕WINSOK高性能NP沟道MOS管WSP4067在Type-C双向快充电源管理系统中的应用
  • 美摄科技受邀参加2025中关村论坛年会,以超高清车载影像技术赋能智慧出行新体验!
  • 4x12G-SDI(四链接12G-SDI)
  • Lambda 表达式在 PyQt/PySide 中的应用
  • 突破传统企业组网瓶颈:某科技公司智能组网服务项目深度解析
  • Docker部署单节点使用KRaft存储数据的Kafka与可视化界面Kafka-Map
  • 解决多种类潮湿敏感元器件的多温度、多时长的排潮烘干
  • 网络编程 04:TCP连接,客户端与服务器的区别,实现 TCP 聊天及文件上传,Tomcat 的简单使用
  • CVPR 强化学习模块深度分析:连多项式不等式+自驾规划
  • 判断语句中std::cin隐式转换为bool--重载operator bool()
  • 外卖大战之后,再看美团的护城河
  • autojs RSA加密(使用public.pem、private.pem)
  • IAR工程如何生成compile_commands.json文件(能生成但是clangd不能生成“.cache文件”)
  • 水质溶解氧检测仪:用于测量水体中溶解氧浓度的专业设备
  • Partner 类开发:会议参与者可视化控件
  • Excel Word Pdf 格式转换
  • 深入解析Qt节点编辑器框架:高级特性与性能优化(四)
  • Kafka 副本同步异常与 ISR 收缩故障排查实录
  • 自动化Reddit 效率已ready
  • Linux(0)|梦开始的地方:xshell下载
  • 表达式语言EL
  • Java全栈工程师的实战面试:从基础到微服务架构
  • More Effective C++ 条款16:牢记80-20准则(Remember the 80-20 Rule)
  • 对于01背包的一些疑问
  • 第十三章项目资源管理--13.8 控制资源
  • 数学七夕花礼(MATLAB版)
  • 嵌入式学习日志————MPU6050简介