通过Python编程实现RSA产生公钥和私钥,及RSA对明文的加密,输出密文;同时对相应密文进行解密,恢复明文。
时间: 2024-12-01 12:30:41 浏览: 34
rsa.rar_RSA加密解密和
在Python中,你可以使用`cryptography`库来实现RSA算法,这个库提供了一种简单的方式来生成密钥对并进行加密和解密操作。以下是基本步骤:
首先,你需要安装`cryptography`库,可以使用pip安装:
```bash
pip install cryptography
```
然后,你可以编写以下代码:
```python
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
# 生成RSA密钥对
def generate_keys():
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# 序列化密钥以便于存储或传输
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
return private_key, public_key, private_pem, public_pem
# 加密函数
def encrypt(message, public_key):
message = message.encode() # 将字符串转为字节
encrypted_message = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted_message
# 解密函数
def decrypt(ciphertext, private_key):
ciphertext = bytes.fromhex(ciphertext) # 如果是从十六进制字符串转回字节
decrypted_message = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decrypted_message.decode() # 转回字符串
# 示例
private_key, public_key, private_pem, public_pem = generate_keys()
message = "Hello, RSA!"
encrypted = encrypt(message, public_key)
decrypted = decrypt(encrypted.hex(), private_key)
print(f"原始消息: {message}")
print(f"加密后的密文: {encrypted.hex()}")
print(f"解密后的明文: {decrypted}")
```
在这个示例中,我们生成了一个2048位的RSA密钥对,并演示了如何使用它们加密和解密数据。
阅读全文