UNCTF 竞技赛 simple_rsa

 

将n写入txt文件,使用yafu分离n

yafu-x64.exe "factor(@)" -batchfile rsa.txt

 

a1-a56由yafu分离而得
其中部分数据不是素数,继续用yafu分解
得到所有的素因子,代入求解可得flag

#coding:utf-8
from libnum import *
import gmpy2
import binascii
n = 3464115689260819392935656139231271022088014497600959975252672820761470484618617542699739764705620767566046150296286140279466041905437740736319886548924058066340624280173573039937440574809212831672936265975209972857747738693288788052694888593629820783280181774594890101819911390468376042288685444703477639361249422054925155575158181408046447773183467474182159096249846479461475003039637685547191529769071424947165685996675043741359728960138725130116665515880652680244470002603320184043266997163009799067135481330853926800023087208636366543210276325733789567957712475079676808820490428973148590780103404729397985019089646026534758042652163974037179260930147000267787012874887703048185189387666199961350969478997330352491403611551096779887936063702892671572230523920277869824082318417366635732798078805070773662305098133013800559413976855639167085996705265872418286939474978058429877355305699191892248323534097124680592084808397263288943661630283254265898940430505371463275516870915261799702701453110383723660477322192658118815861974573497885759332587457883589126213868868281682733732394640188383458580555618181208722172011645063817887462511925363883111475043389367021569982583145912277082528397480756465818166640691294267829613428532584923122279261412957652411789780285394451850006055483598427256129336822790446219260722224551892755568723667049099823707012236618539013908897459508493477299241358343681962043777720375898238069411747593247677719659288861028038609681592049271388766040068274682329498410270047730060645409396168652996740411436504098243588534151795927613112273405281530700440843961363083171583053608594479571127638861391879160062136043924515492933057094406001740725150570943724333872057035272515676895138632004436149126542560186729495087753846670118167613304943153665660470977150177815354160112481310498255965933157902965011317272734556307544837058247794721427834401390455487872367113056168812990496943458920406382650794656884209032284257748450399719067686010156664485086500184078244358783696803659745365860507822269113477617988541658390715640119076036723560146145256418191555730429

e = 0x10001
#d = gmpy2.invert(e,n-1)
c = 1348180992713820685594359831085361247035354818267759694375727771380213764105201303900290589048476671838784929302557807429509301123621642066527762448168417430350203900517746161928291953862336621873868684964993481406952303460424386080800907869577832154132021624995347121475139439850224598911049824567475034545196149320206620924509546294914370633958171840525667753751028800452370972967842349036965813468093121305475860652163573748880159896028384459277781803606279654121781761535513864212749202340439422384362197321739535686506006254445152569135807838677803047115947240251817017395748631234023225248868640103807357800695487118067385969130665294711887439861169737031598274672286881054564295019370600398079829687943670066246766386800967129670975899437309257181151390273864539453238400821713398980792443187238155205199387468000884390778225928491109565539772444103430764411852162036780535068932010631521096301305200494731040799554079996593223419379540630567412342494359961515157700054387356888773321804429041668331430841954949061238002355270616266853430676140296078177898764114420743905073496118755793091902224563802923183897542996809393707165837427396760691616506592877656939455806776333105152244073459704842848097376929745632888315642056267589901527329593161439752243318158600747713335265681764274061086952626629147275106502354039293870614872849851780761537660716667003562253735923584765118319171207551032289722689929226947535724389015974764265109970513715649126340709399701638880824570967389428525179746112494690443526404899052482884526335312491500994658519105204100875596292743155076199283666094556235485722975240358390560161706163569618302627055238860096406627340558428533728688904747040262153892623865784320600845613247625784683300197845026108394831724602330903266980995146046956218083954561639114586880305451066793209385702886944430548686040360906088479432852330611586273784509957389880104225534635731572089138568407411433675077699382999593384336070450058824669351046095205147266720901917218217564113964074957585348227506587531149811564371155522575778721899999227020238022970334707476977210019
a1 = 677503714261921
a2 = 984757480429817
a3 = 815074094063689
a4 = 815074094063689
a5 = 944930141650037
a6 = 856178227444909
a7 = 715183211622487
a8 = 967006279296159122815900866317
a9 = 978045071944247
a10 = 720165121087748352159091150519
a11 = 724742058447313
a12 = 724742058447313
a13 = 724742058447313
a14 = 1081427268297553
a15 = 296868988829164262943612969737506216429391957141576023116767
a16 = 966308867670313
a17 = 1043705605371301
a18 = 1043705605371301
a19 = 937540762313155955330010896129671469425494653
a20 = 812096162953321047636934033912795297974614819
a21 = 784253651784549822383086262276497836125809217
a22 = 682113920188052273255351663383896794635032050401971828694711409205287288799964328388336071
a23 = 619542948947551282960845021356732566996580070553833026232939915564633020003172695193065711
a24 = 675109873421737679644161985001542637907797957
a25 = 629458666579671688821528812557
a26 = 1729741531673913639123518293902518420401702817880002601169977076922158153696380313549619120133060347532337
a27 = 164420567474019527100397263099000694479391157979625828573222272604637249914997973201892009
a28 = 874836098288333825655391584942426992049908661818862029391361
a29 = 1165416412398725741275330130056767323562494626715942971452469
a30 = 81478093111012148440672429083413700463492293918078172522084191451280685130830655303762103
a31 = 1225693141787213359851649217651453825832228003375376918394130534224392749194181329095539233
a32 = 1077668576143074088380692911897228734408665991757857461408377
a33 = 715430864436918581694486811171946580617800528497576456163912722508334951167
a34 = 943701294996391
a35 = 943701294996391
a36 = 423093312836573429630054238653627638444563703763081451128920586965507214640409162417004747
a37 = 1071950107947776273995360924663
a38 = 664385662633491963815674256489
a39 = 364939007354238696507871129354400497236354961
a40 = 164492022687034046553638219117359789452009813331831820613121
a41 = 641684938192901
a42 = 261618977957267922588610227253931993770198111706347598998561
a43 = 954618379731647
a44 = 954618379731647
a45 = 704464051158383
a46 = 1772662091010670193226846653702591504103455601914458327684386299405032433549
a47 = 748467168976403067899834136165719932515327157897706928442143961024518442951
a48 = 703539080250683
a49 = 457614106740738101897943050183
a50 = 525251051282448452580396919969
a51 = 525251051282448452580396919969
a52 = 981974037784501
a53 = 587388539718763
a54 = 967122915373441
a55 = 893528442714179
a56 = 631416517651991

#k = a1*a2*a3*a4*a5*a6*a7*a8*a9*a10*a11*a12*a13*a14*a15*a16*a17*a18*a19*a20*a21*a22*a23*a24*a25*a26*a27*a28*a29*a30*a31*a32*a33*a34*a35*a36*a37*a38*a39*a40*a41*a42*a43*a44*a45*a48*a52*a53*a54*a55*a56

#phi = (a1-1)*(a2-1)*(a3-1)*(a4-1)*(a5-1)*(a6-1)*(a7-1)*(a9-1)*(a11-1)*(a12-1)*(a13-1)*(a14-1)*(a16-1)*(a17-1)*(a18-1)*(a34-1)*(a35-1)*(a41-1)*(a43-1)*(a44-1)*(a45-1)*(a48-1)*(a52-1)*(a53-1)*(a54-1)*(a55-1)*(a56-1)
#d = gmpy2.invert(e,phi)
def fastmod(a,b,n):
    r = 1
    base = a
    while (b != 0):
        if (b & 1 != 0):
            r = ((r%n)* (base%n))%n
        base = (base%n)*(base%n)%n
        b >>= 1;
    
    return r
def isPrime(a):
    q = int(pow(a,0.5))
    for i in range(1,q):
        if a%i==0:
            return 0
    return 1
#print fastmod(10,phi,n)
#m=(pow(c,d,n))
#print isPrime(a1)
#print binascii.unhexlify(hex(m)[2:].strip("L"))


q1 = pow(815074094063689,3)-pow(815074094063689,2)
q2 = pow(981974037784501,2)-pow(981974037784501,1)
q3 = pow(984757480429817,3)-pow(984757480429817,2)
q4 = pow(841139260498291,2)-pow(841139260498291,1)
q5 = pow(856178227444909,2)-pow(856178227444909,1)
q6 = pow(724742058447313,8)-pow(724742058447313,7)
q7 = pow(677503714261921,4)-pow(677503714261921,3)
q8 = pow(954618379731647,3)-pow(954618379731647,2)
q9 = pow(1043705605371301,7)-pow(1043705605371301,6)
q10 = pow(978731094892037,3)-pow(978731094892037,2)
q11 = pow(893528442714179,4)-pow(893528442714179,3)
q12 = pow(953343782444369,2)-pow(953343782444369,1)
q13 = pow(922186690324673,3)-pow(922186690324673,2)
q14 = pow(1049689885943999,1)-1
q15 = pow(944930141650037,5)-pow(944930141650037,4)
q16 = pow(636848617325183,5)-pow(636848617325183,4)
q17 = pow(704464051158383,3)-pow(704464051158383,2)
q18 = pow(1119306505652263,3)-pow(1119306505652263,2)
q19 = pow(877252914708893,3)-pow(877252914708893,2)
q20 = pow(1081427268297553,8)-pow(1081427268297553,7)
q21 = pow(740160703366837,6)-pow(740160703366837,5)
q22 = pow(967122915373441,5)-pow(967122915373441,4)
q23 = pow(1035376745018389,4)-pow(1035376745018389,3)
q24 = pow(1098481230845633,4)-pow(1098481230845633,3)
q25 = pow(989672896024733,2)-pow(989672896024733,1)
q26 = pow(630800650727123,2)-pow(630800650727123,1)
q27 = pow(774980998680907,1)-1
q28 = pow(641684938192901,7)-pow(641684938192901,6)
q29 = pow(1064450848858667,3)-pow(1064450848858667,2)
q30 = pow(943701294996391,7)- pow(943701294996391,6)
q31 = pow(795208712613803,2)-pow(795208712613803,1)
q32 = pow(881436450790369,5)- pow(881436450790369,4)
q33 = pow(1035323724533467,1)-1
q34 = pow(715183211622487,6)-pow(715183211622487,5)
q35 = pow(1121308699190909,5)-pow(1121308699190909,4)
q36 = pow(631416517651991,2)-pow(631416517651991,1)
q37 = pow(978045071944247,1)-1
q38 = pow(966308867670313,1)-1
q39 = pow(703539080250683,1)-1
q40 = pow(587388539718763,1)-1

k = q1*q2*q3*q4*q5*q6*q7*q8*q9*q10*q11*q12*q13*q14*q15*q16*q17*q18*q19*q20*q21*q22*q23*q24*q25*q26*q27*q28*q29*q30*q31*q32*q33*q34*q35*q36*q37*q38*q39*q40
#if k < n:
#    print 'k<n'
#elif k > n:
#    print 'k>n'
#else:
#    print 'k==n'
d = gmpy2.invert(e,k)
print n2s(pow(c,d,n))

 

posted @ 2019-11-29 20:18  山野村夫z1  阅读(483)  评论(0编辑  收藏  举报