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))