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

应该够我日常使用的了

原文地址:https://www.cnblogs.com/shenshuoyaoyouguang/p/13711233.html