[MoeCTF 2022]Signin
题目:
from Crypto.Util.number import *
from secret import flag
m=bytes_to_long(flag)
p=getPrime(512)
q=getPrime(512)
print('p=',p)
print('q=',q)
n=p*q
e=65537
c=pow(m,e,n)
print('c=',c)
#p= 12408795636519868275579286477747181009018504169827579387457997229774738126230652970860811085539129972962189443268046963335610845404214331426857155412988073
#q= 12190036856294802286447270376342375357864587534233715766210874702670724440751066267168907565322961270655972226761426182258587581206888580394726683112820379
#c= 68960610962019321576894097705679955071402844421318149418040507036722717269530195000135979777852568744281930839319120003106023209276898286482202725287026853925179071583797231099755287410760748104635674307266042492611618076506037004587354018148812584502385622631122387857218023049204722123597067641896169655595
exp.py
from Crypto.Util.number import *
import gmpy2
e=65537
p= 12408795636519868275579286477747181009018504169827579387457997229774738126230652970860811085539129972962189443268046963335610845404214331426857155412988073
q= 12190036856294802286447270376342375357864587534233715766210874702670724440751066267168907565322961270655972226761426182258587581206888580394726683112820379
c= 68960610962019321576894097705679955071402844421318149418040507036722717269530195000135979777852568744281930839319120003106023209276898286482202725287026853925179071583797231099755287410760748104635674307266042492611618076506037004587354018148812584502385622631122387857218023049204722123597067641896169655595
n = p*q
phi = (p-1)*(q-1)
t = GCD(e,phi)
print(t)
print(GCD(e,p-1))
print(GCD(e,q-1))
#e是q-1的因子,直接令phi=p-1,m=pow(c,d,p)
d = inverse(e,p-1)
m = pow(c,d,p)
print(long_to_bytes(m))
#moectf{Oh~Now_Y0u_Kn0W_HoW_RsA_W0rkS!}
[LitCTF 2024]small_e
题目:
from Crypto.Util.number import *
from secret import flag
p = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 3
c_list = []
for m in flag:
c_list.append(pow(ord(m),e,n))
print(f"n = {n}")
print(f"c_list = {c_list}")
'''
n = 19041138093915757361446596917618836424321232810490087445558083446664894622882726613154205435993358657711781275735559409274819618824173042980556986038895407758062549819608054613307399838408867855623647751322414190174111523595370113664729594420259754806834656490417292174994337683676504327493103018506242963063671315605427867054873507720342850038307517016687659435974562024973531717274759193577450556292821410388268243304996720337394829726453680432751092955575512372582624694709289019402908986429709116441544332327738968785428501665254894444651547623008530708343210644814773933974042816703834571427534684321229977525229
c_list = [438976, 1157625, 1560896, 300763, 592704, 343000, 1860867, 1771561, 1367631, 1601613, 857375, 1225043, 1331000, 1367631, 1685159, 857375, 1295029, 857375, 1030301, 1442897, 1601613, 140608, 1259712, 857375, 970299, 1601613, 941192, 132651, 857375, 1481544, 1367631, 1367631, 1560896, 857375, 110592, 1061208, 857375, 1331000, 1953125]
'''
e和c都很小,直接开三次方
e = 3
n = 19041138093915757361446596917618836424321232810490087445558083446664894622882726613154205435993358657711781275735559409274819618824173042980556986038895407758062549819608054613307399838408867855623647751322414190174111523595370113664729594420259754806834656490417292174994337683676504327493103018506242963063671315605427867054873507720342850038307517016687659435974562024973531717274759193577450556292821410388268243304996720337394829726453680432751092955575512372582624694709289019402908986429709116441544332327738968785428501665254894444651547623008530708343210644814773933974042816703834571427534684321229977525229
c_list = [438976, 1157625, 1560896, 300763, 592704, 343000, 1860867, 1771561, 1367631, 1601613, 857375, 1225043, 1331000, 1367631, 1685159, 857375, 1295029, 857375, 1030301, 1442897, 1601613, 140608, 1259712, 857375, 970299, 1601613, 941192, 132651, 857375, 1481544, 1367631, 1367631, 1560896, 857375, 110592, 1061208, 857375, 1331000, 1953125]
m=''
for c in c_list:
# m += chr(decode_small_e(c, e, n))
m += chr(gmpy2.iroot(c,3)[0])
print(m)
#LitCTF{you_know_m_equ4l_cub3_root_0f_n}
[SWPUCTF 2023 秋季新生赛]EasyRSA
题目:
import libnum
p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
e=65537
m="NSSCTF{*******************}"
m=libnum.s2n(m)
n=p*q
phi_n=(p-1)*(q-1)
d=libnum.invmod(e,phi_n)
c=pow(m,e,n)
print("p=",p)
print("q=",q)
print ("e=",e)
print ("c=",c)
#p= 122912801126049869009003839542545176400185213365268209105714006257803073428638629824801261702125287814910668428403367391355051987389837804474055637991864563803834741161217607848968821280710324766558457056004037592628178078680121173634128054936108782807954132605887275556228703383455969903056759874047110115433
#q= 120790113700754477830062212762518406876786376726996249661848284428829412089402183812692045970711341815805796005449714738748110749559462448861357011272792817313060401380148108517705435100103533857957024851181447994572972501120774586405811257420853542417275740953525627232008812587423053626515513859653865873671
#e= 65537
#c= 7094224488947659163318199615533819770556597977720767621640224798887506152292861133457571683713587909779712343346370719403811813233693263526316785431883833118583425528830238629831001255198236686372518770451273159769779374149881346761523688131115323441973953523582174059584087249568245044443295176738493785560215046375056269378223045128094953923926250055718405799885041115025529297362914403732661935017257507786348635366480744933193471899621592092711962814949533564454932121056035003021428158830645604347966849572981124877683317022116903132719663958775850982016292384237647664448371811915879714093710876989697939277005
没什么可说的,直接解就行了
import libnum
e = 65537
p= 122912801126049869009003839542545176400185213365268209105714006257803073428638629824801261702125287814910668428403367391355051987389837804474055637991864563803834741161217607848968821280710324766558457056004037592628178078680121173634128054936108782807954132605887275556228703383455969903056759874047110115433
q= 120790113700754477830062212762518406876786376726996249661848284428829412089402183812692045970711341815805796005449714738748110749559462448861357011272792817313060401380148108517705435100103533857957024851181447994572972501120774586405811257420853542417275740953525627232008812587423053626515513859653865873671
e= 65537
c= 7094224488947659163318199615533819770556597977720767621640224798887506152292861133457571683713587909779712343346370719403811813233693263526316785431883833118583425528830238629831001255198236686372518770451273159769779374149881346761523688131115323441973953523582174059584087249568245044443295176738493785560215046375056269378223045128094953923926250055718405799885041115025529297362914403732661935017257507786348635366480744933193471899621592092711962814949533564454932121056035003021428158830645604347966849572981124877683317022116903132719663958775850982016292384237647664448371811915879714093710876989697939277005
n = p * q
phi_n = (p - 1) * (q - 1)
d = libnum.invmod(e, phi_n)
m = pow(c,d,n)
print(libnum.n2s(m))
#NSSCTF{RSA_1s_so_ea3y_and_interest1ng!}
[GKCTF 2021]Random
题目:
import random
from hashlib import md5
def get_mask():
file = open("random.txt","w")
for i in range(104):
file.write(str(random.getrandbits(32))+"\n")
file.write(str(random.getrandbits(64))+"\n")
file.write(str(random.getrandbits(96))+"\n")
file.close()
get_mask()
flag = md5(str(random.getrandbits(32)).encode()).hexdigest()
print(flag)
random.txt:
2584323193
1099154419438958164
35367876945070316311325317953
481304047
12782770146993102006
24789628292419559503661788402
2776391832
9046887565683900291
50006261016517120573540241998
4167723109
8540277546428614473
5932047064656933473553742683
2951765291
10958280862127627756
61364239380151547478360346674
727043053
10156271057154381198
32168336768992329620376069852
930821842
16276235036285538859
9299952556848430743503551046
2868231632
5239154873841417200
11073503953912227254738321705
3452646652
8203253126417399900
52795367131471301612397944513
1927997107
17486869700317373240
47859970254711877167132319582
1459348891
9270456490024856463
74988967035830352654888842228
3714813644
1001128959491001919
8338265486641240510773094199
1430706700
17510828220752339511
3163106687132931419335230580
663535320
9606088298064978425
42511409828594385595915384953
908684643
5421916296165007941
9630914642938890694059952508
2209941143
14999144064788271892
3764842169035734035997078921
2718456651
8541807093002241064
70305992075768658972224974121
930303353
887596273180600202
62528479418364179541352908078
3365397759
15219084820731944344
31433566654697222176709895388
1608992428
6417140575231408939
12879789575923814684090165215
2811970399
6123213785028348335
44681647388937033220521089118
1260870056
5601104844042776691
73199461252301674455633950458
883231057
17783480959798771462
53460694547508318015132953966
1332985617
6673661714524041073
54253348096650113440476985084
3911521675
3438383273755779719
50129032267969019444282164464
3311412816
8779405363908462634
77818642029003078860467063235
4204237422
17534771551489868719
47280916590275648057356977963
2090173606
12206397967662831376
9495602410639024810670107439
2896231201
7246124017447704664
64467120363081017096405905335
392254334
12789011750322942845
5247110397471141497763090834
814200188
14344105251896958923
38888779745538270252730950782
205529919
13939756220516981581
67139045733351688501202495914
3563698832
16840754399626540384
15354843719521267197455444900
1386481456
17766886653399976694
61203331542727632580855864074
2032518919
2355401958853696908
58793908005730868677649498244
3991002745
6506506581713943242
49187675946469291318483292566
2346942877
994297989736899070
45437626728896532873251413177
3841694984
14253899037419430689
8435766077661599453131339442
1679990328
5515793210854183190
32981467195097563488749918497
744869832
11965860903258650511
73456728458781563185478913274
1341354796
14941036303190219170
3601563989190071059996878006
3361509481
17629804697469609923
39935200308805986497519634478
213152541
18320881664493742431
35325602739583757661562537619
2583841550
13763800051589427155
24638499459902141689405229579
1930742512
2392210857598517491
10441235412645941387574306751
461860348
2960745717639761142
62671223148116753112168252981
342206006
6480900103080233462
68412521040142848818877222548
114798494
8473329380799862296
13698669860489083061204052132
2900249131
4183161143099214314
18705391538460150746163889528
3766817970
12378384893542868384
55065668763750424532726429526
937387269
6844068130337459179
3209183745118985928581969258
3341723085
5988612409695647387
74389503837936256104231536479
4240599755
15332231015110371140
62955965591068690743297262172
1555895753
6058791220464667520
38335642957673073804843192014
810331063
4826913432979346480
28611765156689124521247554769
2630955218
12776823600930336401
4939603509311727391894886152
3280912700
14886149455945180990
52545650130177883790984384989
2356751225
2213402912509116749
7670693824287789893690942739
1599077432
14059140725965938936
16912587144697957583184157226
1304928684
9448367331308980026
22467661289496622162065003733
2001054151
7669140498758745837
39387592809285963406216440474
1711960460
3944628516045148813
66275496498554499967007163069
1207238325
3474935157030029491
63309877710388250418928028870
759170859
5858654703302236387
47609248816278271537847269046
1571940308
8335124609741508060
63542562244865676783377908343
1103531693
673654248555391502
30211221866217572233934551180
1089271924
7205932443049001486
69303844715341292680611559319
78608136
3404862937733764913
4259499119552843766282799518
2856032696
18313272414884625578
13693483738598197670400133831
873953734
7709221139118742639
34347437826101106015248365081
1783225370
16395574393179667285
7105819215807952823387139051
4039492686
16956581102357069698
57880199206788615132959351746
4151578751
2089635663127651746
37224845035383461896791495968
3139901611
7354140220471025697
7677374435615054008235674795
2008633712
13970520912420834879
64431013803082441566118213963
1788996018
16490194110734000780
30074301251997624246501473245
2460472485
2420976394683211164
63223457068346692358441841920
83976303
11597367904222552300
541189103864720560882255271
1271705896
8355873362347678325
6344182152495584455275136810
516191728
14301559481738139949
56972815139785900061169383374
3206833632
10471460817277304217
48253348743985600958199235128
4093394606
18421023127368906484
3209763791222301851974194188
2294793393
5804188421524711527
71797815201668391465761200460
3776041666
4108093307245233290
36986873094794981638319354001
1123598142
18262625851690101956
75211342463083839154547686361
1000669502
18244976169672436911
72759872679663719847870853888
2863001571
18304840778989692776
22413497817784765711206417816
1497794697
11739492739170519132
67625171938756611423023578679
3351136254
11816001323328933293
68942708548438536419919996191
1327110822
1299589815565305619
62081225258542372826911047279
3410663545
13158537297009141542
21762078985419016317415112411
1245509971
8804545967037621189
12841311881373962346628325162
2090373367
5289193049949531539
58444176241871300895472370959
571136405
2357132884718584788
51271731657715979715595461713
1432929573
503683219995130744
42705435265543268884777575518
1452726104
2295689344585140511
56996373195070838495288737642
187502663
13760641334049999515
64971355271690455751992498230
2679386081
172294286357194222
78658263482976308261205349174
2643925505
9627451492376735719
44487428240561493246393172961
983662371
2375149476902080328
39784456552690724305541938380
3306946267
16316178008270132149
76712503805317876365091515524
3779008319
4892998918237451139
46329724632809073972496761660
3841865427
15115042473603448600
34888855489304037538590108588
585968278
15088560943809914475
46621092548977030580425482842
exp.py
说是经典的randon预测随机数,使用python中的randcrack库即可破解由Random库随机生成的数。
import re
from hashlib import md5
from randcrack import RandCrack
with open('random.txt', 'r') as f:
mask = re.findall(r'\d+', f.read())
mask = [int(_) for _ in mask]
rc = RandCrack()
isEnough = False
for i in range(104):
for j in range(3):
for k in range(j+1):
if not isEnough:
try:
rc.submit(mask[3*i + j] & 0xffffffff)
mask[3*i + j] >>= 32
except ValueError:
isEnough = True
rc.predict_getrandbits(32)
else:
rc.predict_getrandbits(32)
flag = md5(str(rc.predict_getrandbits(32)).encode()).hexdigest()
print('NSSCTF{%s}' % flag)
#NSSCTF{14c71fec812b754b2061a35a4f6d8421}