python实现AES加密和解密
时间: 2025-01-04 08:17:56 浏览: 9
### Python 实现 AES 加密和解密
为了实现AES加密和解密,在Python中通常会使用`pycryptodome`库。下面展示了一个简单的例子,其中包含了必要的填充函数以及实际的加密和解密逻辑。
#### 安装依赖包
首先需要安装 `pycryptodome` 库,可以利用pip工具完成安装:
```bash
pip install pycryptodome
```
#### 密码填充与移除
由于AES算法要求输入的数据长度必须是特定大小的倍数(通常是16字节),因此当数据不满足条件时就需要对其进行适当填充。这里采用PKCS7作为填充标准[^2]。
```python
from Crypto.Util.Padding import pad, unpad
BLOCK_SIZE = 16 # 对应于AES-128位模式下的块大小
data_to_pad = b'example data'
padded_data = pad(data_to_pad, BLOCK_SIZE)
print(f"Padded Data: {padded_data}")
original_data = unpad(padded_data, BLOCK_SIZE)
print(f"Unpadded Original Data: {original_data.decode()}")
```
#### 创建加密/解密功能
接下来定义具体的加密和解密方法。这些方法接收明文字符串、密钥以及其他可选参数,并返回相应的处理结果。
```python
from base64 import b64encode, b64decode
from Crypto.Cipher import AES
import hashlib
def generate_key(password):
"""基于给定密码生成固定长度的密钥"""
sha_signature = hashlib.sha256(password.encode()).digest()
return sha_signature[:16]
def encrypt_aes(plain_text, password):
key = generate_key(password)
cipher = AES.new(key, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(plain_text.encode('utf-8'), AES.block_size))
iv = b64encode(cipher.iv).decode('utf-8')
ciphertext = b64encode(ct_bytes).decode('utf-8')
result = {'iv': iv, 'ciphertext': ciphertext}
return result
def decrypt_aes(enc_dict, password):
try:
key = generate_key(password)
iv = b64decode(enc_dict['iv'])
ct = b64decode(enc_dict['ciphertext'])
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
pt = unpad(cipher.decrypt(ct), AES.block_size).decode('utf-8')
return pt
except Exception as e:
print(e)
raise ValueError("Decryption failed.")
```
上述代码展示了完整的AES加解密流程,包括但不限于创建随机初始化向量IV、执行加密操作并编码成Base64格式以便传输存储;同样地,在解密端先解析传入的信息再调用相应API恢复原文本[^1]。
阅读全文