Python实现RSA加密(解密)算法
RSA是一种非对称加密算法,广泛应用于数字签名、密钥交换和数据加密等场景中。本篇攻略介绍如何利用Python实现RSA加密和解密。
RSA加密算法流程
RSA加密算法的流程如下:
- 选择两个不同的质数$p$和$q$。
- 计算$n=pq$。
- 计算$\varphi(n)=(p-1)(q-1)$,其中$\varphi(n)$是欧拉函数。
- 选择一个整数$e$,$1<e<\varphi(n)$且$e$与$\varphi(n)$互质。
- 计算$d$,使得$de\equiv 1\pmod{\varphi(n)}$,即$d=e^{-1}\pmod{\varphi(n)}$。
- 公钥为$(n,e)$,私钥为$(n,d)$。
- 加密过程为$C=M^e\pmod{n}$,其中$M$为明文,$C$为密文。
- 解密过程为$M=C^d\pmod{n}$,其中$M$为明文,$C$为密文。
Python实现RSA加密(解密)算法
导入模块
Python中的RSA加密算法需要使用到Crypto
模块的PublicKey
和PrivateKey
类,需先安装pycryptodome
库。可以使用以下命令安装:
pip install pycryptodome
生成公钥和私钥
可以使用Crypto
模块的RSA
类生成RSA密钥对。以下示例代码生成一个2048位的密钥对,其中公钥保存在public.pem
文件中,私钥保存在private.pem
文件中。
from Crypto.PublicKey import RSA
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
with open("private.pem", "wb") as f:
f.write(private_key)
with open("public.pem", "wb") as f:
f.write(public_key)
加密和解密数据
以下示例代码使用生成的公钥和私钥实现RSA加密和解密。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 加载私钥
with open("private.pem", "rb") as f:
private = RSA.import_key(f.read())
# 加载公钥
with open("public.pem", "rb") as f:
public = RSA.import_key(f.read())
# 加密数据
message = b"Hello, world!"
cipher = PKCS1_OAEP.new(public)
encrypted_data = cipher.encrypt(message)
print(f"加密后的数据:{encrypted_data}")
# 解密数据
cipher = PKCS1_OAEP.new(private)
decrypted_data = cipher.decrypt(encrypted_data)
print(f"解密后的数据:{decrypted_data}")
输出结果为:
加密后的数据:b'}\xab\x0e\x1e]G\xbe).N\xa3\x0b\xe8s\x16\n\xc7#\xa2\xe8\xf9\x81\xf3^#E0.\x84\xf4\xa4\x16]\xa3\xbe\xd6i\xa6Q\xe1\x04\xd9\xe0l\xc7)\xc3O\xcb\xaf\x01FyF\xb8q$L\xef3\xb2\x98\xe5z\xc7\xe8\xf6{I\x05X\x8c\x90JG\x17\x9d\xaa\x8f*p\x88\x85tM\xe9}\xd0G\x18\xcfy\x1c\xbdk\x95\x05\xd1\xef\x8d~[.\xc0\xc6\xd2s\x8c\xabGhsF\xc6\xc6\n\xd2\xd8\xeb\xc2z\'\xc6q\xc5\n\xb8\xce\x18\xac]i"\x84!\xac\x1f\xe3\x1b%?\xe5\xdc~zJ\x07\x7fwz\x1e\xc0\xa4\xf0\x84\x85\xb9\x95\xb8u[\x96l\x13[\x83\xe5\xf5?\xf9\x1cR\x9c\xf5\x14\xd4o\xea)\xc3\xcex%\xec\xe1O'
解密后的数据:b'Hello, world!'
以上就是Python实现RSA加密(解密)算法的完整攻略。通过以上例子的演示,我们可以了解到基本的RSA加密和解密的实现方式,以及密钥匹配、数据密文传输等步骤。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现RSA加密(解密)算法 - Python技术站