【RAS非对称加密算法】DEMO原理与示例
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 生成 RSA 密钥对
def generate_rsa_keys():
"""
公钥是通过特定算法从私钥导出的,可以安全地公开。
公钥用于加密数据或验证签名。
私钥用于解密数据或生成签名。
"""
key = RSA.generate(2048) # 生成 2048 位的 RSA 密钥
private_key = key.export_key() # 导出私钥
public_key = key.publickey().export_key() # 导出公钥
return private_key, public_key
# 加密
def encrypt_message(message, public_key):
"""
在加密时,公钥用于将明文信息转换为密文,只有与公钥对应的私钥才能解密密文。
使用加密算法(如 PKCS1_OAEP)对明文进行加密,自动处理填充和转换为密文。
"""
public_key = RSA.import_key(public_key) # 导入公钥
cipher = PKCS1_OAEP.new(public_key) # 使用 PKCS1_OAEP 进行加密
encrypted_message = cipher.encrypt(message.encode('utf-8'))
return encrypted_message
# 解密
def decrypt_message(encrypted_message, private_key):
"""
解密过程涉及使用私钥对通过公钥加密的密文进行还原。私钥与公钥在 RSA 加密过程中有明确的数学关系,确保只有私钥能解密由公钥加密的数据。
"""
private_key = RSA.import_key(private_key) # 导入私钥
cipher = PKCS1_OAEP.new(private_key) # 使用 PKCS1_OAEP 进行解密
decrypted_message = cipher.decrypt(encrypted_message).decode('utf-8')
return decrypted_message
# 测试
if __name__ == "__main__":
# 生成密钥
private_key, public_key = generate_rsa_keys()
print("私钥:")
print(private_key.decode())
print("公钥:")
print(public_key.decode())
# 加密和解密
message = "Hello, PyCryptodome!"
print(f"\n原始消息: {message}")
encrypted = encrypt_message(message, public_key)
print(f"加密后的消息: {encrypted}")
decrypted = decrypt_message(encrypted, private_key)
print(f"解密后的消息: {decrypted}")
Python全栈(后端、数据分析、脚本、爬虫、EXE客户端) / 前端(WEB,移动,H5) / Linux / SpringBoot / 机器学习