密码学—RSA学习
密码学
非对称加密:
RSA:
数论基础:
欧拉函数:
定义:
欧拉函数(Euler's totient function),即 φ(n) ,表示的是小于等于 n 和 n 互质的数的个数。
比如说 φ(1)=1。
当n是质数的时候,显然有φ(n)=n-1 。
性质:
欧拉函数是积性函数。
即对任意满足gcd(a,b)=1的整数a,b,有φ(ab)=φ(a)φ(b)。
欧拉定理:
定义:
若gcd(a,m)=1,则aφ(m)≡1(mod m)。
乘法逆元:
定义:
如果一个线性同余方程ax≡1(mod b),则x称为a mod b的逆元,记作a-1。
基本原理:
公钥与私钥的产生 :
- 随机选择两个不同大质数 p 和 q,计算 N=p×q
- 根据欧拉函数,求得 φ(N)=φ(p)φ(q)=(p−1)(q−1)
- 选择一个小于 φ(N)的整数 e,使 e 和 φ(N) 互质。并求得 e 关于 φ(N) 的模反元素,命名为 d,有 ed≡1(modφ(N))
- 将 p 和 q 的记录销毁
此时,(N,e) 是公钥,(N,d) 是私钥。
消息加密:
首先需要将消息 以一个双方约定好的格式转化为一个小于 N,且与 N 互质的整数 m。如果消息太长,可以将消息分为几段,这也就是我们所说的块加密,后对于每一部分利用如下公式加密:
c = me % N
消息解密:
利用私钥 d 进行解密。
m = cd % N
正确性证明:
即我们要证 med%N=m ( (me%N)d%N=m 再由模运算原理得),已知ed≡1modφ(N),那么 ed=kφ(N)+1,即需要证明
mkϕ(N)+1 ≡ m mod N
这里我们分两种情况证明
第一种情况 gcd(m,N)=1,那么 mφ(N)≡1modN,因此原式成立。
第二种情况 gcd(m,N)≠1,那么 m 必然是 p 或者 q 的倍数,并且 m 小于 N。我们假设
m=xp
那么 x 必然小于 q,又由于 q 是素数。那么
mφ(q)≡1modq
进而
mkφ(N)=mk(p−1)(q−1)=(mφ(q))k(p−1)≡1modq
那么
mkφ(N)+1=m+uqm
进而
mkφ(N)+1=m+uqxp=m+uxN
所以原式成立。
Python代码实现:
以下是RSA算法的一个简单Python实现示例:
import random
from gmpy2 import *
# 生成RSA密钥对
def generate_keys(p, q):
n = p * q
phi = (p - 1) * (q - 1)
# 选择一个e,使得1 < e < phi且e与phi互质
e = random.randrange(1, phi)
g = gcd(e, phi)
while g != 1:
e = random.randrange(1, phi)
g = gcd(e, phi)
# 计算d,使得d是e关于phi的乘法逆元
d = invert(e, phi)
return ((e, n), (d, n))
# 加密函数
def encrypt(pk, plaintext):
key, n = pk
cipher = [pow(ord(char), key, n) for char in plaintext]
return cipher
# 解密函数
def decrypt(pk, ciphertext):
key, n = pk
plain = [chr(pow(char, key, n)) for char in ciphertext]
return ''.join(plain)
# 主函数
if __name__ == "__main__":
# 选择两个大质数p和q
p = 61
q = 53 # 在实际应用中,这些数应该非常大
# 生成密钥对
public, private = generate_keys(p, q)
print("Public Key:", public)
print("Private Key:", private)
# 原始消息
message = "HELLO"
print("Message:", message)
# 加密消息
encrypted_msg = encrypt(public, message)
print("Encrypted Message:", encrypted_msg)
# 解密消息
decrypted_msg = decrypt(private, encrypted_msg)
print("Decrypted Message:", decrypted_msg)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】