ctf-show rsa

ctf-show rsa

1.baby rsa1

已知e,p,q,c

n=p*q得到n,RSA基础题型解密得解。

phi_n = (p-1)*(q-1)#最小公倍数
d = gmpy2.invert(e,phi_n)#求逆元
m = pow(c,d,n)#c^d mod n
print(libnum.n2s(int(m)))#数字转字符串

2.easy rsa1

已知e,n,c

利用factordb.com分解得p,q

即rsa基础题型求解

3.easy rsa2

观察数据,e相同,已知n1,c1,n2,c2

可得为变式题型n不互素

q=gmpy2.gcd(n1,n2)#gcd(x,y)求x,y最大公约数
p1=n1//q
phi_n=(q-1)*(p1-1)
d1=libnum.invmod(e,phi_n)#对e模phi_n取反
m=pow(c1,d1,n1)
print(libnum.n2s(int(m)).decode())#decode()字节转字符串

4.easy rsa3

观察数据,n相同,已知e1,c1,e2,c2

可得为变式题型共模攻击

s1,s2,s3=gmpy2.gcdext(e1,e2)#扩展欧几里得原理
m=(pow(c1,s2,n)*pow(c2,s3,n)%n)

5.easy rsa4

观察数据,e=3,已知n,c

可得为变式题型低加密指数攻击,k比较小

def de(c,e,n):
    k=0
    while True:
        m=c+n*k
        result,flag=gmpy2.iroot(m,e)#开方
        if True == flag:
            return result
        k+=1
m=de(c,e,n)#解密

你可能感兴趣的:(密码学)