RSA 加密解密
from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime
import libnum
# 一、取两个素数
p = getPrime(256)
q = getPrime(256)
# 二、计算 n = p * q 称为模
n = p * q
# 三、计算欧拉函数
ol = (p - 1) * (q - 1)
# 四、选取密钥 e 与 ol 互素,e 要大于 1 且小于 ol,常用值为 3、17、65537
e = 65537
# 五、求 e mod ol 的逆元 d
d = libnum.invmod(e, ol)
# 公钥为 e 和 n,私钥为 d, p 和 q 可以丢弃,但是必须保密。
print(f"{p=}\n{q=}")
print(f"公钥: \n{e=}\n{n=}")
print(f"私钥: \n{d=}")
# 明文转成整型
m = bytes_to_long("123456".encode())
# 加密
encode = pow(m, e, n)
print(f"密文: {encode=}")
# 解密
decode = pow(encode, d, n)
# 整型转字符串
decode = long_to_bytes(decode).decode()
print(f"明文: {decode=}")