您好,欢迎来到微智科技网。
搜索
您的当前位置:首页BUUCTF RSA题目全解3

BUUCTF RSA题目全解3

来源:微智科技网

1.[WUSTCTF2020]babyrsa

,就行了

from gmpy2 import*
from libnum import*

p = 123986151112514321253695123569301
q =  3861231253719236511912198698112935859

c = 287677588809406627799346125261525624066746132034067068674563959869856083182
n = 7306988677162528074357836610140626042768481735145873508846925735521695159
e = 65537

phi = (p-1)*(q-1)
d = invert(e,phi)

m =pow(c,d,n)
print(n2s(m))

flag{just_@_piece_0f_cak3}

2.RSA4

参考文章

from gmpy2 import *
from Crypto.Util.number import *
from functools import reduce

# 将5进制数转换为10进制数  int('',5)
N1 = int('331310324212000030020214312244232222400142410423413104441140203003243002104333214202031202212403400220031202142322434104143104244241214204444443323000244130122022422310201104411044030113302323014101331214303223312402430402404413033243132101010422240133122211400434023222214231402403403200012221023341333340042343122302113410210110221233241303024431330001303404020104442443120130000334110042432010203401440404010003442001223042211442001413004',5)
c1 = int('310020004234033304244200421414413320341301002123030311202340222410301423440312412440240244110200112141140201224032402232131204213012303204422003300004011434102141321223311243242010014140422411342304322201241112402132203101131221223004022003120002110230023341143201404311340311134230140231412201333333142402423134333211302102413111111424430032440123340034044314223400401224111323000242234420441240411021023100222003123214343030122032301042243',5)

N2 = int('302240000040421410144422133334143140011011044322223144412002220243001141141114123223331331304421113021231204322233120121444434210041232214144413244434424302311222143224402302432102242132244032010020113224011121043232143221203424243134044314022212024343100042342002432331144300214212414033414120004344211330224020301223033334324244031204240122301242232011303211220044222411134403012132420311110302442344021122101224411230002203344140143044114',5)
c2 = int('112200203404013430330214124004404423210041321043000303233141423344144222343401042200334033203124030011440014210112103234440312134032123400444344144233020130110134042102220302002413321102022414130443041144240310121020100310104334204234412411424420321211112232031121330310333414423433343322024400121200333330432223421433344122023012440013041401423202210124024431040013414313121123433424113113414422043330422002314144111134142044333404112240344',5)

N3 = int('332200324410041111434222123043121331442103233332422341041340412034230003314420311333101344231212130200312041044324431141033004333110021013020140020011222012300020041342040004002220210223122111314112124333211132230332124022423141214031303144444134403024420111423244424030030003340213032121303213343020401304243330001314023030121034113334404440421242240113103203013341231330004332040302440011324004130324034323430143102401440130242321424020323',5)
c3 = int('10013444120141130322433204124002242224332334011124210012440241402342100410331131441303242011002101323040403311120421304422222200324402244243322422444414043342130111111330022213203030324422101133032212042042243101434342203204121042113212104212423330331134311311114143200011240002111312122234340003403312040401043021433112031334324322123304112340014030132021432101130211241134422413442312013042141212003102211300321404043012124332013240431242',5)

N = [N1,N2,N3]
c = [c1,c2,c3]


# 中国剩余定理算法
def chinese_remainder(modulus, remainders):
    Sum = 0
    prod = reduce(lambda a, b: a*b, modulus)
    for m_i, r_i in zip(modulus, remainders):
        p = prod // m_i
        Sum += r_i * (inverse(p,m_i)*p)
    return Sum % prod
e = 3

# print(chinese_remainder(N,c))
pow_m_e = chinese_remainder(N,c)

# pow_m_e = 17446992834638639179129969961058029457462398677361658450137832328330435503838651797276948099006970051566965639160767062372806840423087023742140145529356863469816868212911716782075239982732270371450454580243655132210863756950134392067763009413000539409426855117928513504041393665811306885187721751084123416969530756520037
m = iroot(pow_m_e,e)[0]

print(long_to_bytes(m))

flag{D4mn_y0u_h4s74d_wh47_4_b100dy_b4s74rd!}

3.[AFCTF2018]你能看出这是什么加密么

简单的RSA加密

from gmpy2 import*
from Crypto.Util.number import long_to_bytes

p=int('0x928fb6aa9d813b6c3270131818a7c54edb18e3806942b88670106c1821e03263194a8c49392849432b37632f0abe3f3c52e909b939c91c50e41a7b8cd00c67d6743b4f',16)

q=int('0xec301417ccdffa679a8dcc4027dd0d75baf9d441625ed30472165717f4732884c33f25d4ee6a6c9ae6c44aedad039b0b72cf42cab7f80d32b74061',16)

e=int('0x10001',16)

c=int('0x70c9133e17e95c3cb99bd998a9028b5bf492929725a9e8e6d2e277fa0f37205580b196e5f121a2e83bc80a8204c99f5036a07c8cf6f96c420369b4161d2654a7eccbdaf583204b5e137b3bd15c5ce865298416fd5831cba0d947113ed5be5426b708b451934d11f9aed9085b48b729449e461ff0863552149b965e22b6',16)

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

d=invert(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m))
flag{R54_|5_$0_$imp13}

4.[HDCTF2019]together(共模攻击)

先解析公钥

# python3
import gmpy2, libnum, base

def ex(a, b):
    if b==0: return 1, 0
    x, y = ex(b, a%b)
    return y, x-a//b*y

n = 148530812779024112409917195822654372941606850943265592807574744922779983235742511903476546587017739515990983662486615971130152215660413055019951638624341705595692623859594788574008499480938293273355698610765349914458861410569451815059410571143830693062547630788205742399253573144558449346681620784979079971559976102366527270867527423001083169127402157598183442923348038374265311728530263199142440729755572003535460603527442636378675571620429886176035616570590229601377376297854883265016542024294661022723268768841320111152381619260637023031430545168618446134188815113100443559425057634959299
e1 = 2333
c1 = int.from_bytes(base.bdecode('R3Noy6r3WLItytAmb4FmHEygoilucEEZbO9ZYXx5JN03HNpBLDx7fXd2fl+UL5+11RCs/y0qlTGURWWDtG66eNLzGwNpAKiVj6I7RtUJl2Pcm3NvFeAFwI9UsVREyh7zIV6sI9ZP8l/2GVDorLAz5ULW+f0OINGhJmZm8FL/aDnlfTElhQ87LPicWpXYoMtyr6WrxjK6Ontn8BqCt0EjQ7TeXZhxIH9VTPWjDmFdmOqaqdVIT+LZemTgLNESwM5nn4g5S3aFDFwj1YiDYl0/+8etvKfOrfoKOwR0CxsRHagwdUUTES8EcHLmMGCxCkDZn3SzmmA6Nb3lgLeSgG8P1A=='), 'big')
e2 = 23333
c2 = int.from_bytes(base.bdecode('O+rRCXI3aTB6P1rYIOPUdalUp6ujpwEq4I20CoWA+HIL8xxGtqY6N5gpr0guZv9ZgOEAMFnBxOqMdVNnB9GgnhmXtt1ZWydPqIcHvlfwpd/Lyd0XSjXnjaz3P3vOQvR71cD/uXyBA0XPzmnTIMgEhuGJVFm8min0L/2qI7wg/Z7w1+4mOmi655JIXeCiG23ukDv6l9bZuqfGvWCa1KKXWDP31nLbp0ZN2obUs6jEAa1qVTaX6M4My+sks+0VvHATrAUuCrmMwVEivqIJ/nS6ymGVERN6Ohnzyr168knEBKOVj0FAOx3YLfppMM+XbOGHeqdKJRLpMvqFXDMGQInT3w=='), 'big')

a, b = ex(e1, e2)

m = pow(c1, a, n)*pow(c2, b, n)%n
# m = gmpy2.powmod(c1, a, n) * gmpy2.powmod(c2, b, n) % n
print(libnum.n2s(m))

flag{23re_SDxF_y78hu_5rFgS}

5.[RoarCTF2019]babyRSA

题目

import sympy
import random

def myGetPrime():
    A= getPrime(513)
    print(A)
    B=A-random.randint(1e3,1e5)
    print(B)
    return sympy.nextPrime((B!)%A)
p=myGetPrime()
#A1=21856963452461630437348278434191434000066076750419027493852463513469865262034083661383106660230095977263239777348731756033905665829995441692467234407
#B1=21856963452461630437348278434191434000066076750419027493852463513469865262034083661383106660230095977263239777348731756033905665829995441692467140596

q=myGetPrime()
#A2=166113115839228119767887930882002574926093386344688822416716985761217861395457263408674067907545602275160137962699414380768181946170303048518584127
#B2=16611311583922811976788793088200257492609338634468882241671698576121786139545726340867406790754560227516013796269941438076818194617030304851858351026

r=myGetPrime()

n=p*q*r
#n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534962833041663125566090130753390990043141344752426233223265915304706790869348194712106907045156282241735765321718709511846731325542136901233080426973619699863603750609547029206563144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432675840587090103424678822362733
c=pow(flag,e,n)
#e=0x1001
#c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009993206708038397756029970806047622206302099726297559651403175260346804524833609173788122443658845271860563418886155335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684352731690512299575982524113387273436271604181981994856628032924188022044308745213421084136236351504759631212200952367728
#so,what is the flag?

参考wp:

数论考点:

关键代码分析:

解密代码:

from gmpy2 import*
from libnum import*
from Crypto.Util.number import*
from sympy import*



def get_p_q(A,B):
    tmp = 1
    for i in range(B+1,A-1):
        tmp *= i
        tmp %= A
    tmp_inv = invert(tmp,A)
    result = nextprime(tmp_inv)
    return result
A1=21856963452461630437348278434191434000066076750419027493852463513469865262034083661383106660230095977263239777348731756033905665829995441692467234407
B1=21856963452461630437348278434191434000066076750419027493852463513469865262034083661383106660230095977263239777348731756033905665829995441692467140596

A2=166113115839228119767887930882002574926093386344688822416716985761217861395457263408674067907545602275160137962699414380768181946170303048518584127
B2=16611311583922811976788793088200257492609338634468882241671698576121786139545726340867406790754560227516013796269941438076818194617030304851858351026

n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534962833041663125566090130753390990043141344752426233223265915304706790869348194712106907045156282241735765321718709511846731325542136901233080426973619699863603750609547029206563144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432675840587090103424678822362733
c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009993206708038397756029970806047622206302099726297559651403175260346804524833609173788122443658845271860563418886155335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684352731690512299575982524113387273436271604181981994856628032924188022044308745213421084136236351504759631212200952367728

p=get_p_q(A1,B1)
q=get_p_q(A2,B2)

r = n//p//q

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

e=0x1001

d= invert(e,phi)

m= pow(c,int(d),n)
print(n2s(m))

flag{wm-CongrAtu1ation4-1t4-ju4t-A-bAby-R4A}

6.[ACTF新生赛2020]crypto-rsa3

由题目可以得到值 n,c,e,已知p,q接近,所以可以yafu爆破获取到pq

from flag import FLAG
from Cryptodome.Util.number import *
import gmpy2
import random

e=65537
p = getPrime(512)
q = int(gmpy2.next_prime(p))
n = p*q
m = bytes_to_long(FLAG)
c = pow(m,e,n)
print(n)
print(c)

from libnum import *
from gmpy2 import *

c = 1457390378511382354771000540945361168477505269307316823750714074908512703070905749525830483035988737117653971428424612332020925926617395558868160380601912498299922825914229510166957910451841730021988380763448341288308014072284472217752711349928156290102782374379406719292116047581560530382210049

p = 1332690905035744735265858368339693780781470577230547014328421929887179385731430095055622303549577233495793715580004801634268505725255565021519817179293
q = 1332690905035744735265858368339693780781470577230547014328421929887179385731430095055622303549577233495793715580004801634268505725255565021519817179231
e=65537
n = p*q

phi = (p-1)*(q-1)
d=invert(e,phi)

m =pow(c,d,n)
print(n2s(m))

flag{p_and_q_should_not_be_so_close_in_value}

7.[RoarCTF2019]RSA

题目

A=(((y%x)**5)%(x%y))**2019+y**316+(y+1)/x
p=next_prime(z*x*y)
q=next_prime(z)
A =  26833491826787145242474695127934760098610147810049249054841274803081613777681928680615618865770483238212608814874634274141761144868858306939594049743229103516924432512724195654425703453612710310587141703587830839067661259284875028738731812942419520862344029478173677408782119491475262870912983074805027462279102572556822231669438279317474828479071904638119711054487239105947104180939770441799498003732243547291798333932198277307886929021756951123086677963043059425881514636218725085516675530560737445829461484720683341674454993144715183575352611863187563270016183228412253724
n =  1179308060435073743259822918230272851488072391179873696095835153538814856088099671454394340816761242974462268435911765045576377767711593100416932019831805933316694626318486128797572295499221976930630810876984781113536245039800923455608533094312556837774106524218307388255883460343086259806678752999183953410148774169011853929056760437954251269687451859565106322336954427505104906770493155723995382318346714944184577415022903775843459724258152991749501477544269502514192049173765173605050245496917236833581708234167579730593547841426014365195008111590367950346763600228301979780528294114933347127
c =  419718502754283836256533508241072916095878538870376242395447627515588382947186721599799292669225217912112471327367394805142265196058037451713407243437058321985546801967986232638066179980724960260199404763249716969285511593719702073657415170295956376809297272541800774788517090573786856800010102914392379200348679327819705132671668021272611109943926253410509439134010676738518851143147097060166221572850232724967935952810540742604511162138159348433174888321536225993661010180815132151207282971313524390669304522818294465865620622425273296725756202617760426536211730955819001674118193293313612128

尝试分解一下n,

顺利获取到p,q的值

from gmpy2 import*
from libnum import*
n =  1179308060435073743259822918230272851488072391179873696095835153538814856088099671454394340816761242974462268435911765045576377767711593100416932019831805933316694626318486128797572295499221976930630810876984781113536245039800923455608533094312556837774106524218307388255883460343086259806678752999183953410148774169011853929056760437954251269687451859565106322336954427505104906770493155723995382318346714944184577415022903775843459724258152991749501477544269502514192049173765173605050245496917236833581708234167579730593547841426014365195008111590367950346763600228301979780528294114933347127
c =  419718502754283836256533508241072916095878538870376242395447627515588382947186721599799292669225217912112471327367394805142265196058037451713407243437058321985546801967986232638066179980724960260199404763249716969285511593719702073657415170295956376809297272541800774788517090573786856800010102914392379200348679327819705132671668021272611109943926253410509439134010676738518851143147097060166221572850232724967935952810540742604511162138159348433174888321536225993661010180815132151207282971313524390669304522818294465865620622425273296725756202617760426536211730955819001674118193293313612128
p = 842868045681390934539739959201847552284980179958879667933078453950968566151662147267006293571765463137270594151138695778616511138042880654559358807836533131308423001461871441295958484342158667416268832194283699123920318826209949442419871530781563470370195514285850736541078623854327959382156753458569
q = 139916095583110513359683322750669367930670987317402487610233558607819811759146323044732913066880786918629002349931170340841511818865685356210084997971982182426706592551291084007983387911006261442519635405457077292515085160744169867410973960652081452455371451222265819051559818441257438021073941183
e = 65537
phi = (p-1)*(q-1)
d = invert(e,phi)

m= pow(c,d,n)
print(n2s(m))

flag{wm-l1l1ll1l1l1l111ll}

8.[AFCTF2018]可怜的RSA

公钥解析,RSA签名加密

from gmpy2 import*
from libnum import*
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
from base import bdecode
e = 65537
n = 79832181757332818552761076134959298461474443227913532839998016278802836109003612812499731758050699162101795605097075132524902086881120372213626187946849193686097668693363086967382697261993832195159914674480765330107602657794957961833150277630398348556604854310395417084671414082602200985927612450106785923475014176269580510459729633673468068467144199744563731826362102608811033400887813754780282628099443490170016087838606998017490456601315802448567772411623826281747245660954245413781519794295336197555688543537992197142258053220453757666537840271756027593749507152830232230741542737319569819793988431443
p = 3133337
q = 2547832609374192922001721363994977190818429145282283155906211693118321971399936004729134841162974144246271483969578603658811742461188195595099621968073788222782856382615820991083394349573034101215141156150874284382004806683086381436237988572039508231846285000290160567618763191511473527300909575569408421442998873946787436077669378280944783301159449035878306853716216548374273462386508307367713112073004011383416749305540675824532481022011922883374442736848045920676341361871231787163441467533076008172188217936916878728772476926653999925560521448458786001262839680273067575342061776244939
phi = (q-1)*(p-1)
d = int(invert(e,phi))

key = RSA.construct((n,e,d,q,p))
cipher = PKCS1_OAEP.new(key)

with open('C:\\Users\\MIKEWYW\\Desktop\\create密码题目\\1212BUUCrypto\\[AFCTF2018]可怜的RSA\\flag.txt','rb') as f:
    f = f.read()
    c = bdecode(f)
    flag = cipher.decrypt(c)
    print(flag)

9.RSA & what

题目分析:

base在解码的过程:
1,先去掉'='
2,8位一读
3,末尾不足8位的地方舍去.

EXP:

from gmpy2 import*
from libnum import*
from Crypto.Util.number import*
import base
import binascii

N =785095419718268286866508214304816985447077293766819398728041116691781082048475931429102798223661229395009474063173705162627037610993539617751905443039278227583504604808251931083810946761327758787454576107434275499665555193719138598753135772822430531500562746677980496946957036603135329331654493129497255817065417273055582216295994587600975970124811496270080697707694600010270103026099059818147208054713391526313700681341093922240317428173599031624125155188214768256061915211820349691203432876911813003996835154148092627004575258766918081802577303517076736603806973884230688100006336848787154028231435491398507329827459698095611907468506981302994580802555823126968731492100282408137822888492559957665067936573356367578459311901662407243387274453743200591166849445573333063851412146530918880177820490434348626203067834361698565175929871100669913438092195793297753233450934770193915434791427728636586218049874617231705308003720066269312729135717569861106880840405412558154011495636032402224979193846917187440140025542016023959693129999941595995360263598790602180596345745457493919771337601177449906657985763003635087109045298307750296954885755749850784285600542531808637253147
e2 = 599
c21=5921690793720937273061002160113958578256323934248097607362903754392290209812090113845446217715999637665417624823791325287283275903010966139983157980612320563496546128496773100071669770510407903915627671487214746335081130339326062270702495254350916922462462779658234144603268112400480605436565886886044523539779068825120910282167004715339763187734797180326976132213325054697165320479166356562518029805927741656605174809726397565772271562066078076105491745903986597877400370206715497528872107204833367860905500813580903042290153348490924974097403734627265297637171818849461766523691595241613878709865503658826991633429450704953381536005205374985394573965828046929592966127157525731402961357849332061460914366179795997497743306999466375914063562409716084034451049094715202196203486088368791744107629271732027325983691531279429724655010086662991657177225077028660334542157832400255043561575486175528628577776358517775179625265500820638302470788307751374586331207934979027509408070750239286694632579691445060224625887220522974308276817508273490943239683376703112729337858388509376115667223821665435911506351149856275066154920056170986154325225204152887767244129985681083657783356557756654335186
c22=3739401683274087873325570756775303371658344840200072027675119202103828303439555536541114867283339805573197993625149606278790167974913812007768832730979916230718727590019068467479776316757043101794488571281603857011852914523053669366534408863734305635222625590986002048609255042730108698456312808149870249805946135429783101292476788266914183353005775775279516236923549783522816708473800775091427025100192132952147904766284865080996085600197309361410863238526802127877523767262921515150984998560136715486579116331650307328522396621410256374522290435100973237243810569763022881368432601639227066929130352224454967160088846581535004546355744211680390731257309941902587303353139951102244865270295414474488798335404630458470663980518657387481458673674623235884967747753367196834415424296324155694875795910660999043578737461300406937822481800265829276988218166878450143925413199684481207815621588614958838278481394258622495754613368100954936131446081865959590982295702202266353631055499759323953350765211376042885200820401212866149229865546527000561466514173595236303696321761987996713836046384165679504213505462044349021131567200062827208591288850271076074941927715678306057176
c23=527630926062293657138598417582144534168490394124010874434443171018570909047114855381070588230560858405390733459207928713682323554753945710983805968354685099973405056043337305477995609988229747473780307779717715522787724471724769409078397103059467101316820971768672044857958261837845956797902782227191865316962242815385619078100402243402703624134324950296721232613754009271598315377607099747787081605832526137843582348585831745447779792428879388275736048377668019983813799990714468310780938686055482709838668356120916040352123019019255084513769603803814947774554028717814635141629127469677151547408635148210795315025361692278726239845037624912699940263824784130809739331730791113051427161333111399235545279259017424722601848670061556859163943546655392794125237501665827340057333783284682505494591223849587792971710172231467812017222849378799040725839057210747667117322158155610129603945371957578329592686037751129328621059457208539592851875217635579153528113876327687977560321771818521145997066995245519739342420457431227441463615969712450340593459153154952321354834496114770357536576200511490922413208178149869347802988786513451481140988715160650620849175561207124650742035831498113605
c24=87837178694032287788070099576167773518449798697269623565532440509112839842809606657619310523045507297743141510205398773596932655397948531624830515446568732945551160099955920431830702087062581840540599577072097104139505857517663273929851202628854185356185719493380008423050341303785833077130371493074778305367582836810935176178201691814207961053386815822307883181084281320517937610149528373304562622728286273557014740578197966332613127307037255728682349635591723533279124400196218388703880918247486296374257591252146398851301631837523708729773517053259212525494555880921052679512582051516604297098204363525081039382358483926727008679327719083138865969291911863630382097160230960738043575559330201821277442452771915324856387676006793149902938422932538625019393377585143774720119332792731811448303811698493873799390755052093069179605579485710343655570028592595882436632426527654452543175871512658019024102822637215098476316042367916779431052267545769495994723721129943616294879230554549129146329804550317558790874015753106997654084736061667271379342245159984166251222130562088000950779331031506992726501161516747024384630627344727140049261036683785068040027400455479716693536349447660850580
c25=20531496220451150035285837225413253316754996082549496185148415707031992867431580754674275990554478140637041427842111391746883257447120035947621456863093406204401079544305928173634697617577241503483833468272663526343265553785294217733488802528374861157617153425146184734956650562829058722415086903837623371249743165260396675220683302142805636069305751406286100039191319992958555012151113932948182187999827032304596907047500008117551008543229025020237369104746316830742226946395027029820825791831870857382722132273460502621007309391833124749430755560033555094234052653628137203661213871388109886630316942550199784000088298730809655920093711762086682900742803681417933657472279670688597862835627506340169978450918788539270346340385928840299573829215317380821608734046381423516769432713854219073148142834322619386570046183556572383980777277173349209330683424343658179781015072259378576130442222984963071166207258558220615972824678508680507379577223713761694231879497037175627542744973063821621482846300348340283756203151932908713003169301392605213825332797676638392786937504094194932807533684515088026582722207676247663906392853084336072552532827023837621497559355122075584637512494819
c26=271453634732502613374816125709912600527787991287839624515809143527363206813219580098196957510291849369814449756739206525124484407499273466949029629399738619835928031665590469163936748220321005180912590441043150692523837484385634324327650828010596909330957474434518308661590042168311300998735327143724021177966665606776248225091592876754324130174859408720916884821490044263639460485174800529063062901262428660342494780404063519400882310814561091957994429967991716755265613341524790685205558849830566592845082875615210309662927476060152873763941536146794134998221314549679627238750326382673119350423345849137338553953961877439358879307421150259723846554283353635590523681802120132061727125612213528331065902025352758470652054809076275923084219202838104856343772452840917479002275255751279578271312516615832988070273076995718542852201143014484023225191136316793431716806316307752688738173707357123139368825087043785842169049943237537188129367275730984747990910339793711383782457513702101233346155217668757001044574426837384074292999773728340419251028537183122525040727957846500853754265967368568624277337913190408651106991904515344454345339191276576874721029586168106207

e1 = 1697
c11=4126295261631507486193280913067422676757405780118000624771741782151273970783531227579758540397048535015794432157910823222107239713593403404814978870791131808838242743811511451355024436983050572020925065435556346256181332030242159415349261132937988520913906144160691555651624605734959214943513831600362808260246053518784080561809077599738041172630025549230417505875488197463468139666730341829133255078262199619239321005263052496521660825425218839858013954516818758240456195044984585824938384521905334290224541529768348673046932924666763557601732324077532562563175461901719952762524613533179846768335347519996551967901684383431982291837470911082629887776598586097447093245718502622932949753366282347672588588738393425968871937726150006701522431518310830397559358296502111822469869573492531567365260716399738440390690429054847406688518560782010933354254128422956049190654873013409015738096175491851060727987991597263752351252605091588329967019278787130847533345491295809124121685941706596054217502048359702319095910634076127793374780651759883654015903962475767093437271961060584771669456701178602590302399814285033569858161318053495490593770474771312708475790956283845695636821650
c12=4944347943710545224678831941508657270079246545955877078221355006970945856834968699866054181016687203404158476748715014011115178822146002771932482734616074110278159848839693962206263586250417815582778049302126542967040550683796941327712758797770820006623214699000011491529353963976684691027403424560774623074085193815839056228605700222317760960637632900767684545014253793079814825842870146154832326706598157910681384409438823774233078622555730398802546803682008295971205073309586054686046857585708461606913205109488291925374523476202975912477634804758775571235751235069761409005652388407528418567136133682500719261718732137914794115466071912329946990194509291410760762179836946570945555295288184698184555018368687708432612286248476073758067175481771199066581572870175460016017100414479343703429178483713224013219316014944149027713208442722109574580238001444184113988239137841043878845979387738687716252329517440068673532468372840830510218585255432000690265226016573313570977945083879214961394087065558376158826938257684057095223383285286932878556817543451624772035652024260229951037431748818273873270007887966574590960376821001380014170236807717824323143388857817595766172152883484274718248
c13=152942283599728307168144137370127212672611407203873212604109810262883105300098675926027121067192207055594802368859657541582298402615901057440435947467042867851826217503388051398437290974927278283816944167767409810217305453740029740376534944567124543272737618380677107180487879658598378336055376182832581782026020482000442197988187102725556269095233490061667560652493355744026382335147572002635214995083739750034313068474530467140276871083969457198034444449540793084049471262163955265512921047220478781783732078860330718572778579979322552513159828372142129820207394591918777985678527172517467045373150037713697378546595170485152591013676942418134278534037654467840633521681227526723015535207773658313099258767094165469538228702397126152998738452084382969577802931178312274091019205818351911572757145556993606343361968023502046160562724601680010500314304612060867349619675872055277677279660967053705633199322779267635281472481559819839042424017171718303214059720568484939239370144038161541354254182769979771948759413102933987773401450693020511773826513161783736386604783484446345744957119469799231796368324927570694496679453313927562345656690240414624431304624859922604652470231310959335
c14=7971798362479512654157583697956031347785885418699105152916187947848828174406231860047090612096000228288651147729455560650308316944933517484241807010802039933299962265662038346938695257976959696100659919413967239590326800190825068143041598300477625793433080634705816385854692124426348587211026568667694805849554780794033771401652171146755728484673723637499012131680983381999682159283263902402115204073302062812653901307639481656945745121405187756030401820298187718667495487619388706055901743308879498474208778292401314909024326020056810851808072941768376062568094875766945038297179001549016338508814467354908507963508326297515420626967914241274382317197049332586607793107373026802654454377719777499591107449593685862930820160679275485967400845992380076107522755566531760628823374519718763740378295585535591752887339222947397184116326706799921515431185636740825707782742373783475781052674257292910213843986132987466810027275052416774693363446184510192025028286703094526223475329326788749908099306825757386538762384151496807194146308614368821006660626870978469704516023106942845611077512077710937773946168563052933356032178327520756554333365975114235981173451368131680404850832773147333013716920
c15=1231113536504011585566399834598706630572978719929270538869712247735296365251106281837157487959875251131775400928141199287082722903703365371103810231346377597407161409696621832693706766303255833852849949431692397459103195434968057377474610500216801375394703781249039351368816958227409657934091741509357152328382960684515093945552479461382281913961956745154260686029997827565075768703774575056157515514360629711639166638570591380856939132463137780336272103122659737394553510472009916519398133377590753110723255690947815414579797515694348816961762796703443502856101079430585547997496001092660049972831138624833766921363033298869366983404824306132914906138032044847514706766860410027725561172136121523226067371508581161229365391317951112635131145697945328058863087299918196635113037777138666914296986040549274559835214505300618256105508702615188765793871598819835446672585370954616097750399839661065797883103731694314852301848272092388637114950059216922969842082852703553809005409303657676119749524341633780566655750134523405696847614260849183043806540121975168868737370939005752191094273663212672971160625615839996368299088147317821606082702137377659012819585276555433184136277921492723185984
c16=368698068159360469118481958174058173502590871483063184373728397960945843262504602537629021472991403838753473176223797833901172485881886018117881163946962062947114958538073112400137862268842651181195463772721545556153631052361928782927033314735476230217443170348194166245626226194523639793573028006666236271812390759036235867495803255905843634725222541387103876265780134575844939175762634715873472026391908570140312690320460239109399082718867509019975061730377357482192638719447887519182881497129667453051932153080530266792599871183501980676113307840328140483746638750773391601297819439992095826848368433599830105606838022887352480038391140249080713926095165069610454677558808754438154217378281522792090622493102845707365245377742438787353328045594465929969206179566757862867114475403538834002824025511581699583450168079568459656526911857835375748015814860506707921852997096156275804955992150777336217699380754130078042232170916046131322530463994567475953004045172224333930554592181965443543707213338752353356847244353220006913302297919568568350829733796170116939479496625151122465877061038196204282582459995390407219293171300888741615770939625794874283587301687123174207198251449851429295

c1 = [c11,c12,c13,c14,c15,c16]
c2 = [c21,c22,c23,c24,c25,c26]

s = ''
a = ext(e1,e2)
for i in range(6):
    m = pow(c1[i],a[1],N)*pow(c2[i],a[2],N)%N
    s +=n2s(m)                                        #16进制转字符串
    #s += binascii.unhexlify(hex(m)[2:]).decode()     16进制转字符串(另一种写法)
ans=s.split('\n')   # 通过分隔符\n对 s 内的字符串进行切片操作

# 关键代码
libase=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/']
def myb_bytes(str):
    s=''
    temp=str.replace('=','')         #去掉=号
    for i in temp:
        s+=bin(libase.index(i))[2:].zfill(6)
    return s

def bytes_to_string(str):
    s=''
    for i in range(0,len(str),8):
        s+=chr(eval('0b'+str[i:i+8]))
    return s

flag = ''
for i in ans:
    b=myb_bytes(i)
    temp=len(b)%8
    if temp !=0:
        flag += b[-temp:]
    else:
        flag=flag

print(bytes_to_string(flag))

10.[网鼎杯 2020 青龙组]you_raise_me_up(离散对数)

涉及知识点:离散对数,可以通过sage来解决
也可以通过 python 第三方sympy库来解决。

这个考点以后可以写一篇专门的文章来解析离散对数及解决代码。

可以参考一下的文章:
1.
2.
3.

from sympy import*
求离散对数(如下15 = 7**3 mod 41):
discrete_log(41, 15, 7)
来分析一下这道题
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Crypto.Util.number import *
import random

n = 2 ** 512
m = random.randint(2, n-1) | 1
c = pow(m, bytes_to_long(flag), n)
print 'm = ' + str(m)
print 'c = ' + str(c)

# m = 3911907091245274259466256527403931830595217293685940385507958140277098603084690847354512078853863186881041563704825943945069343345307381099559075
# c = 66658513942032142458567450723658632520816791621796775909766523300023402328787860254953797995373211308485605397024123180085924117610802485972584499

从题目可以看出来,要解出flag,只需要一个公式即可。

c = m ** flag mod n (这里的等号是同余号)。
意思为 c同余m的flag次方 模 n

我们要解flag的值,用函数
discrete_log(n,c,m) #(模数,同余数,同余数)

from gmpy2 import*
from sympy import*
from libnum import*

n = 2 ** 512
# n = 134078079299425970995740249982058461274793658205923933777235614437217030073546976801874298166903427690031858188605085375388281194656994339006084096
m = 3911907091245274259466256527403931830595217293685940385507958140277098603084690847354512078853863186881041563704825943945069343345307381099559075
c = 66658513942032142458567450723658632520816791621796775909766523300023402328787860254953797995373211308485605397024123180085924117610802485972584499

flag = discrete_log(n,c,m)
print(n2s(flag))

flag{5f95ca93-1594-762d-ed0b-a9139692cb4a}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务