buuoj BJDCTF 2nd rsa1

e=12563813

p2+q2=212364140166849615900345386827373855409339975015067104662427876599237913584644325298351035312142873679076322952156014899039684112869213110216339149927308917382659025088961162906104834880642777126492145702783156362950652476063397902577161748609014031837840662711917518595894632635346530344883820911458709244850

p-q=1229216958615838090114314334960644395484253836034715487250504340340116186107623112083423404349434159568323249956239086670749255398799665610844089840655936

c=51827676710881203491166659826764277577309039684105305483621172525829772630471385387981319993865449118352882293934737116964484462584314865363882077428628370344471679206412057353237007429204706665772490802624283526666579606831464068125533972099477549886997168731214435127809320929334630792638060785700795742467

flag=???

使用z3-solver计算p、q

from z3 import *
s = Solver()
p = Int('p')
q = Int('q')

s.add(p*p+q*q==212364140166849615900345386827373855409339975015067104662427876599237913584644325298351035312142873679076322952156014899039684112869213110216339149927308917382659025088961162906104834880642777126492145702783156362950652476063397902577161748609014031837840662711917518595894632635346530344883820911458709244850)
s.add(p-q==1229216958615838090114314334960644395484253836034715487250504340340116186107623112083423404349434159568323249956239086670749255398799665610844089840655936)
s.add(p>0)

if s.check() == sat:
    print s.model()

根据p和q计算m

import gmpy2

q = 9671514526984958026197102273706720387978474645316351893680554060376886254009425721906847943919855863336656514388242285259383311954691476129611443561216581
p = 10900731485600796116311416608667364783462728481351067380931058400717002440117048833990271348269290022904979764344481371930132567353491141740455533401872517

c=51827676710881203491166659826764277577309039684105305483621172525829772630471385387981319993865449118352882293934737116964484462584314865363882077428628370344471679206412057353237007429204706665772490802624283526666579606831464068125533972099477549886997168731214435127809320929334630792638060785700795742467

e=12563813

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

d=gmpy2.invert(e,phin)

print d

m = pow(c,d,n)

print hex(m)[2:].decode('hex')

flag{b34f48d0-accc-48f9-8c47-78c4f78b6bec}

你可能感兴趣的:(Crypto)