RSA_基础
公式:
密文 = 明文 ^e mod n
明文 = 密文 ^d mod n
n :任意两个互质数的乘积,例如 n = p*q
e : 随机取,只要满足 1 < e < f(p,q) 即可
d: e * d mod f(p,q) =1 , 可以推出d, 欧几里得定理
可以告诉别人的东西: e, n
不能告诉别人的东西: d
只要学会用工具算就行了.
求d 的值
import libnum
e = 0x10001
q = 0x36863
p = 0x10C5B
d = libnum.invmod(e, (p - 1) *(q - 1))
print(d)
使用 rsa 算法加密解密 123
'123' T0oascii 0x313233
使用 rsatools 生成 p,q,e
p = 0x10C5B
q = 0x36863
e = 0x10001
n = p * q = 0x3927DBF31
加密:
0x313233 ** 0x10001 % 0x3927DBF31 = 0x634ed6ab
pow(3224115,0x10001,15342616369)
# 1666111147
hex(1666111147)
# 0x634ed6ab
求d 的值
上面算过了
d = 15063509193
解密:
密文 ^ d 次方 mod n = 明文
0x634ed6ab ** 15063509193 mod 0x3927DBF31 = 3224115
pow(0x634ed6ab,15063509193,0x3927DBF31)
# 3224115
hex(3224115)
# 0x313233
应该够我日常使用的了