python编写rsa加密算法
时间: 2024-06-22 07:01:29 浏览: 127
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,Python中可以使用内置的`cryptography`库来实现RSA算法。以下是基本步骤:
1. 导入必要的库:
```python
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.backends import default_backend
```
2. **生成密钥对**:
- 创建一个RSA对象,指定密钥长度,然后生成私钥和公钥。
```python
key = rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend())
private_key = key
public_key = key.public_key()
```
3. **加密数据**:
- 使用公钥对明文进行加密,通常使用PKCS1_OAEPPadding(一种填充方式)。
```python
def encrypt(message, public_key):
ciphertext = public_key.encrypt(
message.encode(),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return ciphertext
```
4. **解密数据**:
- 使用私钥对密文进行解密。
```python
def decrypt(ciphertext, private_key):
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return plaintext.decode()
```
5. **序列化/反序列化密钥**:
- 为了存储和传输,可以将密钥对象序列化为字节串,反之亦然。
```python
def serialize_key(key, format=serialization.Encoding.PEM, backend=default_backend()):
return key.public_bytes(format=format, encryption_algorithm=serialization.NoEncryption())
def deserialize_key(key_data, format=serialization.Encoding.PEM, backend=default_backend()):
return serialization.load_pem_public_key(key_data, backend=backend)
```
阅读全文