window.onload=function(){ /*页面加载完成之后生成博客目录*/ BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",20); }

RSA趣题篇(简单型)

1、n与p的关系

题目

('n=', 288990088827100766680640490138486855101396196362885475612662192799072729620922966280891529295418086760877864145641240773774844610436051331306946338447987578274717185638059894743079958222428285199328796227699729755905906693841390517397968838979989187937765197009779831853782677148778833145391472483838410348187851940691573340443869780062542939942374320161963733291697585221383236756651125859306190611469903757185440175993363742018028809952801247846742033092984755533015067691332105526414972647382492862838910121236931498154729282070633749340622741556189535964547876244515672975306477660510791252904365137930260201368678082714836609782629541945700299956150734915268018652247423889358580950207466855040229003192308083531802714903385087417356434589306892888679309614923529675726467403933384636928018988851880153857796741120106443942767510880882869047315219885712389114991426210349790111241522116230105084964008967100552072784232695481018329040160132729906613461492188324496134449714224077399892244195702892564301367979224008861187860872226748641058472580561639257018145326272111688770894219937657825160193141745581367365405561724485260621462608988652159867916009465022291576279442397617091954522421449924662838224659158273250901130749121L)
('e=', 65537)
('c=', 137779053430049038434216593290618874948270200405399256269581378223281016900970652718848813337302671790604519081916876544192809184345327660912429768032693176503712428533118856746085101104530004384957878944306712448749988496680310178630490784192543750138162129344588248045230306419533817167822335810463544443187846127211253432794996440212197855199829148459690714008745033082890861457636322467364543567930633647015286211438515604345302463094804730828792938997761910285052058358568926162211399619255066215361304899897417756093402335995371832711502872437222512001157985528518717742208913450911897520543227613018962674806657657794649288850627452188012334771673285026593343941925348598797901401883986370253828688950287301471120024830787649255742214626285600948267746659887690844720659848203176190617138006403190722263638569661414450881185857994056115115153097909046365223008051874366779117102760347630728800614449748348771220711988694991053148346720284163230564679943853428714970819836241190140660788978119501945023060842021831844356818641202498764351298545672779480524641463732128037763042975104375933047678750844329826766152652487655163730244337514529371558702619207820731799113790535682515957476301736026894861608980444780607729321721653L)

我的解答

只给这点信息因此n必可分解。n和c都是长整型数据,直接转十进制超出范围,因此尝试把末尾L删去分解n可得某个数的四次方,看作p

有了p就正常思路解就行。

已知n = p * q 以及 n = p ** 4  => q = p ** 3

=> phi = (p - 1) * (p ** 3 - 1)

但尝试发现用此phi解不出来最终flag。

phi展开后省略了一些小数据尝试几遍发现使用 phi = p ** 4 - p ** 3 (即p ** 3(p - 1))可行

(这里不知道是为什么?可能是因为p**3-1太大了完全可以忽略掉-1?)

最终exp:

from Crypto.Util.number import *
import gmpy2
from gmpy2 import iroot
c = 137779053430049038434216593290618874948270200405399256269581378223281016900970652718848813337302671790604519081916876544192809184345327660912429768032693176503712428533118856746085101104530004384957878944306712448749988496680310178630490784192543750138162129344588248045230306419533817167822335810463544443187846127211253432794996440212197855199829148459690714008745033082890861457636322467364543567930633647015286211438515604345302463094804730828792938997761910285052058358568926162211399619255066215361304899897417756093402335995371832711502872437222512001157985528518717742208913450911897520543227613018962674806657657794649288850627452188012334771673285026593343941925348598797901401883986370253828688950287301471120024830787649255742214626285600948267746659887690844720659848203176190617138006403190722263638569661414450881185857994056115115153097909046365223008051874366779117102760347630728800614449748348771220711988694991053148346720284163230564679943853428714970819836241190140660788978119501945023060842021831844356818641202498764351298545672779480524641463732128037763042975104375933047678750844329826766152652487655163730244337514529371558702619207820731799113790535682515957476301736026894861608980444780607729321721653
n = 288990088827100766680640490138486855101396196362885475612662192799072729620922966280891529295418086760877864145641240773774844610436051331306946338447987578274717185638059894743079958222428285199328796227699729755905906693841390517397968838979989187937765197009779831853782677148778833145391472483838410348187851940691573340443869780062542939942374320161963733291697585221383236756651125859306190611469903757185440175993363742018028809952801247846742033092984755533015067691332105526414972647382492862838910121236931498154729282070633749340622741556189535964547876244515672975306477660510791252904365137930260201368678082714836609782629541945700299956150734915268018652247423889358580950207466855040229003192308083531802714903385087417356434589306892888679309614923529675726467403933384636928018988851880153857796741120106443942767510880882869047315219885712389114991426210349790111241522116230105084964008967100552072784232695481018329040160132729906613461492188324496134449714224077399892244195702892564301367979224008861187860872226748641058472580561639257018145326272111688770894219937657825160193141745581367365405561724485260621462608988652159867916009465022291576279442397617091954522421449924662838224659158273250901130749121
e = 65537
p = iroot(n,4)[0]
phi = p**4 - p**3
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(long_to_bytes(m))
#flag{5a9d88e1-e588-11ed-a829-907841e2ffbc}

2、奇怪的N

题目

n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537

我的解答:

在线网站http://factordb.com/尝试分解n,发现分解的结果就一个,依然是n本身。原来题目说的奇怪的n就是这个意思啊!

我们不难发现这种情况下n是一个素数。 那就好办了。
根据RSA的原理:

n = p * q

= (p-1) * (q-1)

我们知道分解n是为了得到p,q以此来计算 。有了 我们才能求出解密指数

那么本题既然n是素数,因此有 直接求出

exp:

import gmpy2
from Crypto.Util.number import long_to_bytes
n= 161670795418661108941395547760068053355832555077779027853700140442876298077926786030806243269042521234383793929910836023913994987010924339006536693866763078849189869497871752489277315727669547511079303136326388638480680630822677173084810848784554433394382029956739707395702556105138001868786944077871569844771
c= 91652340468387584012845155237237896957786753396661434559421169499111938419733760364914054180181470453332534789456757372866493406817246725731113863637159054175158914882334950110118713886213759125279941357012004180349611604118066085014934218543579248275421019690815403585470855502464076600672369539603525850924
e= 65537
phi = n-1

d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))
#flag{c9991f77-c898-406a-8785-5a6db8081533}

3、m与c互换位置(即m是密文,c是明文)

题目

import gmpy2
import uuid
import random
p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
flag="flag{"+str(uuid.uuid4())+"}"
n=p*q
phi=(p-1)*(q-1)
while True:
    e=random.randint(10000,65537)
    if gmpy2.gcd(e,phi)==1:
        break
d=libnum.invmod(e,phi)
c=libnum.s2n(flag)
m=pow(c,d,n)
print("p=",p)
print("q=",q)
print("m=",m)
print("d=",d)
print("n=",n)
p= 97368485043593006405417010779079380120093793034626963175677083523770994936525207940968193918786949567460392401775664093619173263261961563254058029894381986376275758006361044924787173495349206752585567053148516364028668638365676608691913705470536048404291284013185217624584284180593606281872606674303227862923
q= 174034507670751544663833619122758532253821916016434057019886746556436073565496931298817122456263338650062754783803599969233256462434713772953714031268092314238169815901012809393600325432808839406464715247202866205781781379919342815514475667193698142923567276511836660769097557234679842172400378371421781964289
m= 10713159978080595248303368136468725248428004219265383017568301839870142446158283601395319409739267941310957665427316430008931224971372871063315206268306110608326979812846886034642104794304853873192876460915559231227506777599442060327993342928268503696889652417983518056546140617858431621418835939458147783959307745523951841137415442238550765735249662192808694822637569812286855868419594276671181075389377949452992838748913612817680444419095179848524538089268826799430007066454995062821698762487766844583651126504070187331835027249508337718321126942529727464313184539455069391263828081876598132257030625297646910710698
d= 9390237469625625327767772772501860104758101441676147056413733378437848559772090449906444146313965320608216054116514082700525563243843771204901839503307479128967925438407562718344032952875123364816506810638856925864160725041981647121465162190807436028496569031178392890553177399355087553209625455734016456610191995005421761565733358070901800953003865665637614771105080265950575370421882124992956415586236776481116126106171771156040712750560153951276387711991194466653974368467861952058543035030816993478005980029315268610250448820942344432392048700822441849816775252185085593277697772013794833419946099360440772003135
n= 16945476357208644122981981769374646293926105553473297697614690692652601713322227208661975312188938407555360864148584038092323753063552504666101719934810973632634565975015494529491878727459181230406832788393966249955724078848021959836773296479882218413561668025756126880165471682246491275523240659976474618187166357040262223313242756132850124163812125138317620789358310094970897417863278091383242119765582782451173174886739833284579593252969063972226490849473760753219069834155364181062555776029449332377688052659981492134779226642225005427449494407806051665362319573826702559006783213306262376903229146869818573156747

我的解答:

分析题目所给信息,我们发现跟以前的题目不一样了,这里m变成了密文,而要求的明文则是c。两者换啦换位置。

我们知道
又有
因此有

题目并没有给出e的值。但我们有

exp:

p= 97368485043593006405417010779079380120093793034626963175677083523770994936525207940968193918786949567460392401775664093619173263261961563254058029894381986376275758006361044924787173495349206752585567053148516364028668638365676608691913705470536048404291284013185217624584284180593606281872606674303227862923
q= 174034507670751544663833619122758532253821916016434057019886746556436073565496931298817122456263338650062754783803599969233256462434713772953714031268092314238169815901012809393600325432808839406464715247202866205781781379919342815514475667193698142923567276511836660769097557234679842172400378371421781964289
m= 10713159978080595248303368136468725248428004219265383017568301839870142446158283601395319409739267941310957665427316430008931224971372871063315206268306110608326979812846886034642104794304853873192876460915559231227506777599442060327993342928268503696889652417983518056546140617858431621418835939458147783959307745523951841137415442238550765735249662192808694822637569812286855868419594276671181075389377949452992838748913612817680444419095179848524538089268826799430007066454995062821698762487766844583651126504070187331835027249508337718321126942529727464313184539455069391263828081876598132257030625297646910710698
d= 9390237469625625327767772772501860104758101441676147056413733378437848559772090449906444146313965320608216054116514082700525563243843771204901839503307479128967925438407562718344032952875123364816506810638856925864160725041981647121465162190807436028496569031178392890553177399355087553209625455734016456610191995005421761565733358070901800953003865665637614771105080265950575370421882124992956415586236776481116126106171771156040712750560153951276387711991194466653974368467861952058543035030816993478005980029315268610250448820942344432392048700822441849816775252185085593277697772013794833419946099360440772003135
n= 16945476357208644122981981769374646293926105553473297697614690692652601713322227208661975312188938407555360864148584038092323753063552504666101719934810973632634565975015494529491878727459181230406832788393966249955724078848021959836773296479882218413561668025756126880165471682246491275523240659976474618187166357040262223313242756132850124163812125138317620789358310094970897417863278091383242119765582782451173174886739833284579593252969063972226490849473760753219069834155364181062555776029449332377688052659981492134779226642225005427449494407806051665362319573826702559006783213306262376903229146869818573156747
import libnum
phi_n = (p-1)*(q-1)
e = libnum.invmod(d,phi_n)
c = pow(m, e, n)
print(libnum.n2s(c))
# flag{0ba0fcc8-88d2-4f78-b1e2-e3823539340c}

4、Are S A?

题目

来自比赛 BYUCTF 2024

Found these keys... wonder what they do...

n =  128393532851463575343089974408848099857979358442919384244000744053339479654557691794114605827105884545240515605112453686433508264824840575897640756564360373615937755743038201363814617682765101064651503434978938431452409293245855062934837618374997956788830791719002612108253528457601645424542240025303582528541
e =  65537
c =  93825584976187667358623690800406736193433562907249950376378278056949067505651948206582798483662803340120930066298960547657544217987827103350739742039606274017391266985269135268995550801742990600381727708443998391878164259416326775952210229572031793998878110937636005712923166229535455282012242471666332812788

我的解答:

像这种n找不到任何方法分解的,就直接在 phi = n - 1 下搞就行(通用但仅做尝试)

exp:

from Crypto.Util.number import *
import gmpy2

n = 128393532851463575343089974408848099857979358442919384244000744053339479654557691794114605827105884545240515605112453686433508264824840575897640756564360373615937755743038201363814617682765101064651503434978938431452409293245855062934837618374997956788830791719002612108253528457601645424542240025303582528541
e =  65537
c =  93825584976187667358623690800406736193433562907249950376378278056949067505651948206582798483662803340120930066298960547657544217987827103350739742039606274017391266985269135268995550801742990600381727708443998391878164259416326775952210229572031793998878110937636005712923166229535455282012242471666332812788

phi = n-1
d = gmpy2.invert(e, phi)
m = pow(c, d, n)
print(long_to_bytes(m))
# byuctf{d1d_s0m3_rs4_stuff...m1ght_d3l3t3_l4t3r}

5、Do Math!

题目

来自比赛 BYUCTF 2024

We need to... do math... as cybersecurity people?

139720796479374556837839656652540122243007626643381344885901610199769037583634859417560062099728477295868135937894154388536029033912020951046531754291314791576993247093854916427453824336759832613456125812748403327889942337175444534747145584776834634064449332853034222211593992834883804382517469285134615410890552305298817475187104100695214559355963632453798058802239812117081224193187059004755477271402390752746056934083349914720924964985477019671678390124249156133520641131604245493150059531952315986192987567065110493172095513743268697649505813042269117318549842022700777738416504972716492827707238521250172037318878143246460022194896022766776466227648684930789197508257683373695856981117703510481288986657838150127977468181944992384721842001507170848236471999364207702040065244954529595083994706530374178265246266208976848057249872581824068627294869707076024048278537255430854746383501311236149901970358224464288450149417182216604149405350753982608481484751293575534659469072597038338901449655999077721897580555611253838587088501901572616461450861745788408043293875298899352407738097625467580303774153287504872955432866806079131615030274791176371691768412142419959913433427391907036538199289877381635262505011128001699263122593284

Hints:
[3866294283908370861488986000247430995139186777220357990541055308702037903707384419423826283009132248692192568975203597042009355399751936100480421867341262040737335017123404203927518302827224118229709057228844492753128565357229482359457659966763272646136725283420820796129854472327550520891881208553820989688970427173391779160328649128965136830927404708686730062768841805259990187621992590852687212330417117067906587029875088101166137216351257406367577019997777742867451002173150225957848519180489818297384281682372264975637602389081091911467851281502569478148563215408599772010672364892477652656268001246468514425572021865614220946751853939700620295254407108799251461268851704487486728227236288824048447378581527785367882502867237075440070362693035674677027413684269498945804901755587247582322297029281275913387627689148848411252531896135606049738961803492931831122200762928595785709487784007811064183007593040168953263448181, 3628649695417460562172315261919165549043709593963503335633087846193794925198669443396537711332099330001416771156961283691343877982787723314413110851552024591560420907598588654415705537840898104729737254424204341334008689904573725591551271495102747863837555230824843453350167486014731395948048241691669379097480994057380944391213218649036555692918223032157752111895389190246951731910248198877398965517057737869448282964672470635140939878517426671416232457280765097915904253546503591339765427448900120467971088152395190903792335861055059645334706190248311102008158633420003128537123361250121418756284262680181162625189089585786519534003360535357373023868605497405375065020663001385969284820872120446799517915866964028007422550130397266344718281802740546407102127616395524152153311890940820982444627108375976777379289854717567836101253091116604854859258279919958749154303673140187091899274959707223049802204929874627255009584321, 9606157182439043598872170578642744168098944919513002317243547092783933349126951101232515925102167428847229467444361689353623296746504025201764596226132219569258571256816498179375058698409595725396407373236481359252082807579175910455629819860184585401808660079698789414010432185309643969322080617826789972798109957, 557390968116917607877829363093351805079737673251666125750855204507413143402951042823589767603012181329596501910433247254505703477712968699181752906601465941540893134510615975805428225313640362942516617107041546995371614895479364609820877616901492313825956284172514668995110591266769649498902747148214078714361551166533172720774906405292701625129746765757548911894868677588736464297617260842519992821649964146119541180510262047270950140275778830315152105356623177230353223220665627777554864341106987045510247473690102764921346736030282675873380368512116665379912859727258422298886737986021254816678486456826454925033239291650047977879536634028717942088022498515363228773843881827937421252602178359071343399447476754491530354384743821399856731847364080918633699509079462675749036708735344238989499995166818428663564724371054125511464923830553161827722791228424768893864021380022160450622251556525653648961057653640220274868294955432391214814287172091578650091455077186852210252878989421136057443331549592837248178676355257735098257090256064693810738952500512964294218575884615185180922564391962479167159265600516644421242874922033475612568848455701469155055417915197274344345456557389536486925426130886732646054713022908914774519923852, 538263264876077354278835844354365458289003736282580004677054552128799960628133201065342466271868332880472151805964559748587163918053898759995342752231465836218320104626514241981994011377537441291270452774317491283444142446329524198946300602994669355591759178978441313629896991014103751735455651944949762938101992757874865050589192612588675706284183796825755239043553260296843847013799071173149845196158533600143774705688501254062922926384860349063522338242622392704689866791927863138061957183884357032233632573654406351976706676481304143492464965841758188617909329042280820646392853320414528204206157140231060421944635609596250051670571066978639680472476220763605210759768914567896565243036517540789222487566763401584304485285323923448947626816957034490642108407129443007111596952122083030335946605937834876687675148654878527407472636832862085737586505525535611551828909946664736386297959830871761246381437499696168474217839502976413890295875917502613911304032843445910831763019415476699634154284015804165067691742346908709579361770440364434068760983291051680957726423921878988431317731871208086347006281329458475664817947601463446296166082328266979445064485183236719033479429938563313816672596875515581938722831214134371743273301812]
from Crypto.Util.number import *

p = getPrime(2048)
q = getPrime(2048)
e = 0x10001
n = p * q
d = pow(e, -1, (p-1)*(q-1))

msg = "byuctf{REDACTED}"
m = bytes_to_long(msg.encode('utf-8'))

c = pow(m, e, n)

print(c)
print()

hints = [p, q, e, n, d]
for _ in range(len(hints)):
    hints[_] = (hints[_] * getPrime(1024)) % n
    if hints[_] == 0: hints[_] = (hints[_] - 1) % n

print("Hints:")
print(hints)

我的解答:

其实也就是hints[3]满足hints[_] = (hints[_] * getPrime(1024)) % n    hints[_] == 0

然后此过程:hints[_] = (hints[_] - 1) % n 逆一下找到真正的n

然后求公因子找到p就好算了

exp:

from Crypto.Util.number import *
import gmpy2

c = 139720796479374556837839656652540122243007626643381344885901610199769037583634859417560062099728477295868135937894154388536029033912020951046531754291314791576993247093854916427453824336759832613456125812748403327889942337175444534747145584776834634064449332853034222211593992834883804382517469285134615410890552305298817475187104100695214559355963632453798058802239812117081224193187059004755477271402390752746056934083349914720924964985477019671678390124249156133520641131604245493150059531952315986192987567065110493172095513743268697649505813042269117318549842022700777738416504972716492827707238521250172037318878143246460022194896022766776466227648684930789197508257683373695856981117703510481288986657838150127977468181944992384721842001507170848236471999364207702040065244954529595083994706530374178265246266208976848057249872581824068627294869707076024048278537255430854746383501311236149901970358224464288450149417182216604149405350753982608481484751293575534659469072597038338901449655999077721897580555611253838587088501901572616461450861745788408043293875298899352407738097625467580303774153287504872955432866806079131615030274791176371691768412142419959913433427391907036538199289877381635262505011128001699263122593284
hints = [3866294283908370861488986000247430995139186777220357990541055308702037903707384419423826283009132248692192568975203597042009355399751936100480421867341262040737335017123404203927518302827224118229709057228844492753128565357229482359457659966763272646136725283420820796129854472327550520891881208553820989688970427173391779160328649128965136830927404708686730062768841805259990187621992590852687212330417117067906587029875088101166137216351257406367577019997777742867451002173150225957848519180489818297384281682372264975637602389081091911467851281502569478148563215408599772010672364892477652656268001246468514425572021865614220946751853939700620295254407108799251461268851704487486728227236288824048447378581527785367882502867237075440070362693035674677027413684269498945804901755587247582322297029281275913387627689148848411252531896135606049738961803492931831122200762928595785709487784007811064183007593040168953263448181, 3628649695417460562172315261919165549043709593963503335633087846193794925198669443396537711332099330001416771156961283691343877982787723314413110851552024591560420907598588654415705537840898104729737254424204341334008689904573725591551271495102747863837555230824843453350167486014731395948048241691669379097480994057380944391213218649036555692918223032157752111895389190246951731910248198877398965517057737869448282964672470635140939878517426671416232457280765097915904253546503591339765427448900120467971088152395190903792335861055059645334706190248311102008158633420003128537123361250121418756284262680181162625189089585786519534003360535357373023868605497405375065020663001385969284820872120446799517915866964028007422550130397266344718281802740546407102127616395524152153311890940820982444627108375976777379289854717567836101253091116604854859258279919958749154303673140187091899274959707223049802204929874627255009584321, 9606157182439043598872170578642744168098944919513002317243547092783933349126951101232515925102167428847229467444361689353623296746504025201764596226132219569258571256816498179375058698409595725396407373236481359252082807579175910455629819860184585401808660079698789414010432185309643969322080617826789972798109957, 557390968116917607877829363093351805079737673251666125750855204507413143402951042823589767603012181329596501910433247254505703477712968699181752906601465941540893134510615975805428225313640362942516617107041546995371614895479364609820877616901492313825956284172514668995110591266769649498902747148214078714361551166533172720774906405292701625129746765757548911894868677588736464297617260842519992821649964146119541180510262047270950140275778830315152105356623177230353223220665627777554864341106987045510247473690102764921346736030282675873380368512116665379912859727258422298886737986021254816678486456826454925033239291650047977879536634028717942088022498515363228773843881827937421252602178359071343399447476754491530354384743821399856731847364080918633699509079462675749036708735344238989499995166818428663564724371054125511464923830553161827722791228424768893864021380022160450622251556525653648961057653640220274868294955432391214814287172091578650091455077186852210252878989421136057443331549592837248178676355257735098257090256064693810738952500512964294218575884615185180922564391962479167159265600516644421242874922033475612568848455701469155055417915197274344345456557389536486925426130886732646054713022908914774519923852, 538263264876077354278835844354365458289003736282580004677054552128799960628133201065342466271868332880472151805964559748587163918053898759995342752231465836218320104626514241981994011377537441291270452774317491283444142446329524198946300602994669355591759178978441313629896991014103751735455651944949762938101992757874865050589192612588675706284183796825755239043553260296843847013799071173149845196158533600143774705688501254062922926384860349063522338242622392704689866791927863138061957183884357032233632573654406351976706676481304143492464965841758188617909329042280820646392853320414528204206157140231060421944635609596250051670571066978639680472476220763605210759768914567896565243036517540789222487566763401584304485285323923448947626816957034490642108407129443007111596952122083030335946605937834876687675148654878527407472636832862085737586505525535611551828909946664736386297959830871761246381437499696168474217839502976413890295875917502613911304032843445910831763019415476699634154284015804165067691742346908709579361770440364434068760983291051680957726423921878988431317731871208086347006281329458475664817947601463446296166082328266979445064485183236719033479429938563313816672596875515581938722831214134371743273301812]
n = hints[3] + 1
e = 65537
p = gmpy2.gcd(hints[0],n)
q = n // p
d = gmpy2.invert(e, (p-1)*(q-1))
m = pow(c, d, n)
print(long_to_bytes(m))
# byuctf{th3_g00d_m4th_1snt_th4t_h4rd}

 

posted @ 2023-11-28 10:07  Kicky_Mu  阅读(180)  评论(2编辑  收藏  举报