aes算法python
时间: 2024-12-26 19:14:33 浏览: 3
### Python 中 AES 加密解密算法的实现
在 Python 中,可以利用 `pycryptodome` 库来实现 AES(高级加密标准)算法。此库提供了强大的功能来进行对称加密和解密操作。
#### 安装依赖包
为了使用 AES 加密,在项目环境中安装 pycryptodome:
```bash
pip install pycryptodome
```
#### 密钥与向量初始化
AES 是一种分组密码,通常需要指定一个固定长度的密钥以及初始向量 (IV),以确保每次加密的结果不同,即使对于相同的消息也如此[^3]。
#### 实现 AES 加密函数
下面是一个简单的例子展示如何创建一个名为 `encrypt_AES` 的函数来进行加密处理:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
def encrypt_AES(key, data):
key = key.encode('utf-8')
iv = b'1234567890abcdef' # 可以自动生成或由用户提供
cipher = AES.new(key[:32], AES.MODE_CBC, iv)
ct_bytes = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))
return base64.b64encode(iv + ct_bytes).decode('utf-8')
print(encrypt_AES("thisisaverysecretkey!", "Hello World!"))
```
这段代码首先设置了密钥并选择了 CBC 模式的 AES 进行加密;然后通过填充机制使输入消息适应所需的块大小;最后返回经过 Base64 编码后的结果以便于传输存储[^1]。
#### 实现 AES 解密函数
同样地,这里展示了怎样编写对应的解密过程——即 `decrypt_AES` 函数:
```python
def decrypt_AES(key, enc_data):
key = key.encode('utf-8')
raw = base64.b64decode(enc_data)
iv = raw[:16]
cipher = AES.new(key[:32], AES.MODE_CBC, iv)
pt = unpad(cipher.decrypt(raw[16:]), AES.block_size)
return pt.decode('utf-8')
enc_message = encrypt_AES("thisisaverysecretkey!", "Hello World!")
decrypted_message = decrypt_AES("thisisaverysecretkey!", enc_message)
print(f"Encrypted message: {enc_message}")
print(f"Decrypted message: '{decrypted_message}'")
```
该部分先解析传入参数中的 IV 部分,并据此重建 Cipher 对象完成实际解密工作,之后去除多余填充字符恢复原始信息。
阅读全文