Python非对称加密的实现
非对称加密是一种加密方法,它使用一对密钥:公钥和私钥。公钥可公开,而私钥则需要保密。通过公钥加密的信息只能用私钥解密,这使得非对称加密在数据传输和存储中具有重要意义。
在这篇文章中,我们将探讨如何在Python中实现非对称加密,而不使用内置函数。我们将使用数论中的一些基本概念,例如大素数和欧几里得算法,来实现RSA加密法。
RSA加密的基本原理
RSA算法主要包括以下步骤:
- 选择两个大素数 ( p ) 和 ( q )。
- 计算 ( n = p \times q ) 和欧拉函数 ( \phi(n) = (p-1) \times (q-1) )。
- 选择一个与 ( \phi(n) ) 互质的整数 ( e ),作为公钥的一部分。
- 计算私钥 ( d ),使得 ( d \times e \mod \phi(n) = 1 )。
- 使用公钥 ((e, n)) 进行加密,私钥 ((d, n)) 进行解密。
代码示例
下面是一个简单的RSA非对称加密实现的示例:
import random
# 计算最大公约数
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# 生成大素数
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
def generate_prime():
while True:
num = random.randint(100, 500)
if is_prime(num):
return num
# 生成密钥
def generate_keys():
p = generate_prime()
q = generate_prime()
n = p * q
phi_n = (p - 1) * (q - 1)
e = 65537 # 常用的公开指数
while gcd(e, phi_n) != 1:
e = random.randint(2, phi_n - 1)
# 计算私钥
d = pow(e, -1, phi_n) # 计算与e互为的d
return (e, n), (d, n)
# 加密
def encrypt(public_key, plaintext):
e, n = public_key
cipher = [pow(ord(char), e, n) for char in plaintext]
return cipher
# 解密
def decrypt(private_key, ciphertext):
d, n = private_key
plain = "".join([chr(pow(char, d, n)) for char in ciphertext])
return plain
# 示例运行
public_key, private_key = generate_keys()
message = "hello"
ciphertext = encrypt(public_key, message)
decrypted_message = decrypt(private_key, ciphertext)
print(f"原文: {message}")
print(f"密文: {ciphertext}")
print(f"解密后: {decrypted_message}")
序列图
下面是一个展示RSA加密和解密过程的序列图:
sequenceDiagram
participant User
participant PublicKey
participant PrivateKey
User->>PublicKey: 加密消息
PublicKey->>User: 返回密文
User->>PrivateKey: 解密密文
PrivateKey->>User: 返回原文
关系图
以下是RSA加密中的各个元素关系图:
erDiagram
USER {
string message
}
PUBLIC_KEY {
int e
int n
}
PRIVATE_KEY {
int d
int n
}
USER ||--o{ PUBLIC_KEY : encrypts
USER ||--o{ PRIVATE_KEY : decrypts
结尾
通过上述代码和图示,我们简单实现了RSA非对称加密的基本原理。这种加密方法在现代通信中具有重要的安全性与可靠性。虽然这里的实现较为基础,但它展现了非对称加密的核心思想。在实际应用中,建议使用成熟的库和工具,例如pycryptodome,以确保更高的安全性和性能。希望这篇文章能帮助你更好地理解非对称加密的基本概念与实现。
















