平台WP · 2022年10月17日

初见RSA

最简单的rsa

from Crypto.Util.number import getPrime, bytes_to_long
import gmpy2

p = q = 2
while gmpy2.gcd(p, q) > 1:
    p, q = getPrime(1024), getPrime(1024)
print 'p', p
print 'q', q
n = p * q
e = 0x10001
flag =
m = bytes_to_long(flag.encode())
c = pow(m, e, n)
print 'c', c

p 97778652325903437962825328661262844071443416855766632300597054085223610634215905636181349488868673838061510087375280462482123476890821966390217977680557149701190482294091500070671822215509408708661823630854923565206776525716966230862556816749952202647668441494854355958814064211472856335835762422825215655691
q 100392575670381831922158783846771320580484971898687800225341824917512161985824810946188420120417338089896708049335244000687072232232163925227696346460617261224063178449169611440033322551602856700947427935117597895819122330125354684392564034183334867180419531632422891340050203755609565935850974653269209728573
c 541924349305415672862569785951115092507944141056518703022138722942425776824107108302121849890001822883592913018463460757277078977104488311881088187818712428883207474694362745273581612271562399808516961539861145584383108639698332049794542459787976851971475184841413507338712437465792446578786234947511728229229071349019975088540236995163582572297381586241543739491008809149741125762738959214260683756539265428645507456015076049602482028679769364330239290425397853093236309497212131809532801185599960689293775756298394723741764714327648864318630626023344464924756833570039343191683462134681314124357338576208050661321

这是题目
现在已经给定了p和q和e所以现在就是要找到d
找到d之后直接就能解rsa
exp:

from Crypto.Util.number import getPrime, bytes_to_long, long_to_bytes
from gmpy2 import invert
p = 97778652325903437962825328661262844071443416855766632300597054085223610634215905636181349488868673838061510087375280462482123476890821966390217977680557149701190482294091500070671822215509408708661823630854923565206776525716966230862556816749952202647668441494854355958814064211472856335835762422825215655691
q = 100392575670381831922158783846771320580484971898687800225341824917512161985824810946188420120417338089896708049335244000687072232232163925227696346460617261224063178449169611440033322551602856700947427935117597895819122330125354684392564034183334867180419531632422891340050203755609565935850974653269209728573
c = 541924349305415672862569785951115092507944141056518703022138722942425776824107108302121849890001822883592913018463460757277078977104488311881088187818712428883207474694362745273581612271562399808516961539861145584383108639698332049794542459787976851971475184841413507338712437465792446578786234947511728229229071349019975088540236995163582572297381586241543739491008809149741125762738959214260683756539265428645507456015076049602482028679769364330239290425397853093236309497212131809532801185599960689293775756298394723741764714327648864318630626023344464924756833570039343191683462134681314124357338576208050661321
e = 0x10001
n = p*q
phi = (p-1)*(q-1)
d = invert(e,phi)
print(long_to_bytes(pow(c,d,n)))

flag:nynuctf{155b3530-9de1-4ae6-9ace-d55a19a67dd1}