e = 0x10001 c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108 fn = (q-1)*(p-1) d = gmpy2.invert(e, fn)
m = pow(c,d,n) print(m) print(binascii.unhexlify(hex(m)[2:])) print(libnum.n2s(m).replace('NCTF',"flag"))
import gmpy2 import libnum from gmpy2 import invert, gcd, iroot from Crypto.Util.number import * from binascii import a2b_hex, b2a_hex
s = '==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM' s = s[::-1] c = base64.b64decode(s) cc = 2373740699529364991763589324200093466206785561836101840381622237225512234632 p = gmpy2.mpz(177077389675257695042507998165006460849) n = gmpy2.mpz(37421829509887796274897162249367329400988647145613325367337968063341372726061)
q = gmpy2.mpz(n // p)
fn = gmpy2.mpz((q - 1) * (p - 1)) flag = open("flag.txt",'w') for e in range(50000,70001): try: d = invert(e, fn) # if libnum.n2s(pow(cc, d, n)).find('flag{'): # print(libnum.n2s(pow(cc, d, n))) flag.write(libnum.n2s(pow(cc, d, n))) print(1) except: pass
n1 = 13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037 n2 = 12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787320159318432456050806227784435091161119982613987303255995543165395426658059462110056431392517548717447898084915167661172362984251201688639469652283452307712821398857016487590794996544468826705600332208535201443322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047 p = gmpy2.gcd(n1, n2) print'gcd(n1, n2):\n', p q1 = n1 / p q2 = n2 / p print'q1 is:\n', q1 print'q2 is:\n', q2
fn = (p-1)*(q1-1) c = 12641635617803746150332232646354596292707861480200207537199141183624438303757120570096741248020236666965755798009656547738616399025300123043766255518596149348930444599820675230046423373053051631932557230849083426859490183732303751744004874183062594856870318614289991675980063548316499486908923209627563871554875612702079100567018698992935818206109087568166097392314105717555482926141030505639571708876213167112187962584484065321545727594135175369233925922507794999607323536976824183162923385005669930403448853465141405846835919842908469787547341752365471892495204307644586161393228776042015534147913888338316244169120 # for e in range(100000): # if pow(294,e,n1) ==381631268825806469518166370387352035475775677163615730759454343913563615970881967332407709901235637718936184198930226303761876517101208677107311006065728014220477966000620964056616058676999878976943319063836649085085377577273214792371548775204594097887078898598463892440141577974544939268247818937936607013100808169758675042264568547764031628431414727922168580998494695800403043312406643527637667466318473669542326169218665366423043579003388486634167642663495896607282155808331902351188500197960905672207046579647052764579411814305689137519860880916467272056778641442758940135016400808740387144508156358067955215018: # print(e) e = 52361 d = gmpy2.invert(e, fn) m = pow(c,d,n1) print(binascii.unhexlify(hex(m)[2:])) print(libnum.n2s(m).replace('BJD','flag'))
[BJDCTF2020]rsa_output
知识点:共模攻击 发现n一样
# -*-coding:utf-8-*- # coding=utf-8 #!/bin/python2 # -*- coding: cp936 -*- import time import time
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2021/5/31 18:36 # @Author : upload # @File : [BJDCTF2020]rsa_output.py # @Software: PyCharm import gmpy2 import binascii import rsa import math defexgcd(m, n, x, y): if n == 0: x = 1 y = 0 return (m, x, y) a1 = b = 1 a = b1 = 0 c = m d = n q = int(c / d) r = c % d while r: c = d d = r t = a1 a1 = a a = t - q * a t = b1 b1 = b b = t - q * b q = int(c / d) r = c % d x = a y = b return (d, x, y)#扩展欧几里得算法 c1=20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599 c2=11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227 e1=2767 e2=3659 n=21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111
# a = [] # st = 'ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee' # st = st.replace(' ',',') # all = {'none1':'','none2':'','w':'abc','e':'def','r':'ghi','t':'jkl','y':'mno','u':'pors','i':'tuv','o':'wxyz'} # st = st.split(',') # print(st) # flag = '' # for i in st: # print(i[0]) # print(len(i)) # print(all[i[0]][len(i)-1]) # flag += all[i[0]][len(i)-1] # print('flag{'+flag+'}')
import libnum # import rsa import math defexgcd(m, n, x, y): if n == 0: x = 1 y = 0 return (m, x, y) a1 = b = 1 a = b1 = 0 c = m d = n q = int(c / d) r = c % d while r: c = d d = r t = a1 a1 = a a = t - q * a t = b1 b1 = b b = t - q * b q = int(c / d) r = c % d x = a y = b return (d, x, y)#扩展欧几里得算法 c1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349 c2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535 e1=773 e2=839 n=6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249
flag = '' result = str(m) i=0 while i < len(result): print('i:',i) if(result[i]=='1'): flag +=chr(int(result[i:i+3])) i+=3 else: flag+=chr(int(result[i:i+2])) i+=2
import gmpy2 from Crypto.Util.number import long_to_bytes
c = 28767758880940662779934612526152562406674613203406706867456395986985664083182 n = 73069886771625642807435783661014062604264768481735145873508846925735521695159 e = 65537
q =189239861511125143212536989589123569301 p =386123125371923651191219869811293586459 fn = (p-1)*(q-1) d = gmpy2.invert(e, fn) m = pow(c,d,n) print(long_to_bytes(m).replace('wctf2020','flag'))