最近学习了一些关于Crypto的知识,我把重点放到了RSA上面,它有很多题型,就是因为RSA他是一个很好,很标准的模板,它上面不只是展示一些RSA基础的东西,它还可以把一些离散对数,椭圆曲线,格子上的一些东西放到RSA模板上...说实话这些对于我来说有亿点点难!
首先,深入了解了一下数学原理,比如欧拉函数,欧拉定理模逆及指数,其中,欧拉定理十分重要。
除此之外还需要两个常见的Python包下的函数。
#Crypto.Util.number
bytes_to_long() & long_to_bytes()
getPrime() & getStrongPrime()
inverse() & pow()
#gmpy2
iroot()
gcdext()
next_prime()
RSA的算法
解密过程:
加密过程:
使用代码描述:
from Crypto.Util.number import *
#generate public key and private key
p,q = getPrime(512),getPrime(512)
n = p*q
phi = (p-1)*(q-1)
e = getPrime(20)
while GCD(e,phi) != 1;
e = getPrime(20)
d = inverse(e,phi)
#encrypt
flag = b'flag{te3t_f1@g}'
m = bytes_to_long(flag)
c = pow(em,e,n)
#decrypt
M = pow(c,d,n)
FLAG = long_to_bytes(M)
print(FLAG)
666666666666666666