[NPUCTF2020]认清形势,建立信心-WP

2020年09月10日 57点热度 0人点赞 0条评论

题目:

from Crypto.Util.number import *
from gmpy2 import *
from secret import flag

p = getPrime(25)
e = # Hidden
q = getPrime(25)
n = p * q
m = bytes_to_long(flag.strip(b"npuctf{").strip(b"}"))

c = pow(m, e, n)
print(c)
print(pow(2, e, n))
print(pow(4, e, n))
print(pow(8, e, n))

'''
169169912654178
128509160179202
518818742414340
358553002064450
'''

根据题意,我们可以得到
c=169169912654178
x=2^emodn=128509160179202
y=4^emodn=518818742414340
z=8^emodn=358553002064450

根据上面的三个式子我们可以得到ne

又因为n=p*q

我们可以推出p、q

下面就是简单的RSA啦

n

import gmpy2
c = 169169912654178
x = 128509160179202
y = 518818742414340
z = 358553002064450
print(gmpy2.gcd(x**2-y,x*y-z))

在这里插入图片描述
通过离散对数就可以求出e,看到很多师傅用的c++,也很方便

import sympy
import Crypto.Util.number
e=sympy.discrete_log(n,x,2)
d=gmpy2.invert(e,(p-1)*(q-1))
print(Crypto.Util.number.long_to_bytes(gmpy2.powmod(c,d,n)))

luoluo

我爱吃螺蛳粉

文章评论