[dasctf]crypto3 可以写个方程吗?

from Crypto.Util.number import getPrime, bytes_to_long
flag = b"flag{dskjhfksdnbsjkadnfkjdhsfklsdf}"
m = bytes_to_long(flag)
p = getPrime(512)
q = getPrime(512)
n = p*q
e = 0x10001
c = pow(m, e, n)
hint = 5*p**5 - q**4 + p**3 + q**2

print(f"n = {n}")
print(f"e = {e}")
print(f"c = {c}")
print(f"h = {hint}")
print(f"f = {flag}")

"""
n = 89699139292208617060339768006409751967888031109549144453096823761184120607144695640328834241377241414359261316375436534762312897065568583973404899671755166294278211600486422378053829595201863837417120500228595785980788466797113573823272191306547863769454970676489804185194887802982379145684484184269703255393
e = 65537
c = 39608709117345412783347361966842651569180166819731799769191064990371730411196409154773429402603817188666434229597815340925081204073672829961088047087325002640041641208661989177602336636038953455449310156880722065085631538130841856194373173815389153337616801616480809993742783638339824821360438067939624110312
h = 70366000269414146461972217346608831026837225170936464253478765985896944012828923888316617800275976161583118471319546732000786347045624486693805942646601582847848577393064501300227408907085942233295630131192627805395588125553837903421329565550622882118390254177795340263586784857051118099200733261310169098852140133625930434447480184358630389419619149218608332947444311282289607075016795280353887761369307652864582586159668022639973957993354166715599012797674977942302671970850485951666914852023616906745700568792712753921438628910168497880323367596317176798298283706943376090817263800760798619991892513833817338210619393129541855523329200271870264969103550105221345812591082613125466100635936031296689485692355577740175800112862544198023769053005057939880580882191983602
"""

hint和n分解pq然后常规rsa,解出来的m就是题中的flag。

奇怪的是sage居然解不出来,sympy可以。

from sympy import *
p=Symbol('p')
q=Symbol('q')
n = 89699139292208617060339768006409751967888031109549144453096823761184120607144695640328834241377241414359261316375436534762312897065568583973404899671755166294278211600486422378053829595201863837417120500228595785980788466797113573823272191306547863769454970676489804185194887802982379145684484184269703255393
e = 65537
c = 39608709117345412783347361966842651569180166819731799769191064990371730411196409154773429402603817188666434229597815340925081204073672829961088047087325002640041641208661989177602336636038953455449310156880722065085631538130841856194373173815389153337616801616480809993742783638339824821360438067939624110312
h = 70366000269414146461972217346608831026837225170936464253478765985896944012828923888316617800275976161583118471319546732000786347045624486693805942646601582847848577393064501300227408907085942233295630131192627805395588125553837903421329565550622882118390254177795340263586784857051118099200733261310169098852140133625930434447480184358630389419619149218608332947444311282289607075016795280353887761369307652864582586159668022639973957993354166715599012797674977942302671970850485951666914852023616906745700568792712753921438628910168497880323367596317176798298283706943376090817263800760798619991892513833817338210619393129541855523329200271870264969103550105221345812591082613125466100635936031296689485692355577740175800112862544198023769053005057939880580882191983602

f1=p*q-n
f2=5*p**5 - q**4 + p**3 + q**2-h

intr=solve([f1,f2],[p,q])
print(intr)
p,q=(6755827815545391872067332896347380002456050069734240914068446797072531381613540368069467474431117380477640416470522078333250801178498456516239529518106123, 13277298021984488163888136619162399902569498459740352721179432108941394853115457757812181474689680734285712852789725113268674048215936269454192251323863491)
assert n==p*q
e=0x10001
from Crypto.Util.number import *
def rsa(p,q,e,c):
    d=pow(e,-1,(p-1)*(q-1))
    m=pow(c,d,p*q)
    print(long_to_bytes(m))
rsa(p,q,e,c)
# b'flag{dskjhfksdnbsjkadnfkjdhsfklsdf}'

你可能感兴趣的:(python,ctf,crypto)