文章来自NSSCTF工坊Xenny的课程
1.非对称加密
2.介绍RSA来源(三位数学家名字开头)
3.RSA数学基础
4.算法实现
from Crypto.Util.number import * #这个是关于RSA很多函数的库
p = getPrime(512) #111RSA第一步:生成随机的512位(二进制位 )p q
q = getPrime(512)
n = p*q #生成n
phi = (p-1)*(q-1) #欧拉函数
e = 65537 #公钥
assert GCD(e, phi) == 1, "该e不满足互素条件" #查看e 与 欧拉函数是否互质
d = inverse(e, phi) #求逆元d
print(f'公钥:({e}, {n})') #查看公钥
print(f'私钥:({d}, {n})') #查看私钥
message = b'hello_RSA' #让明文转换为字符串
m = bytes_to_long(message) #将字符串转换为整数
print('消息:', m)
c = pow(m, e, n) #加密 m的e次幂在模n下
print('密文整数:', c)
msg = pow(c, d, n) #解密 c的d次幂在模n下
print('明文整数:', msg)
mw = long_to_bytes(msg)
print('明文整数:', mw)
assert msg == m, "解密失败"
5.RSA工作原理:
1.生成公钥,私钥
-
选取两个不同的 大素数 � p 和 � q ,计算 �=�⋅� N= p⋅ q 。
-
求 欧拉函数 值 �(�)=�(�)�(�)=(�−1)(�−1) φ(N)=φ(p)φ(q)=(p−1)(q−1)。
-
选择一个小于 �(�) φ ( N ) 的整数 � e ,并且满足 � e 和 �(�) φ(N) 互质,求得 � e 在模 �(�) φ ( N ) 意义下的 乘法逆元 � d ,有 ��≡1(mod�(�)) e d ≡ 1 ( mod φ ( N )) 。
-
销毁 � p 和 � q 。
此时有 (�,�)(N,e) 为公钥, (�,�)(N,d) 为私钥。
2.加密
3.解密
附加说明
m 明文
c 密文