用python实现AES加解密
时间: 2023-07-12 20:14:51 浏览: 99
以下是Python中使用pycryptodome库实现AES加解密的示例代码:
```python
from Crypto.Cipher import AES
import base64
# 定义加密函数
def encrypt(key, data):
iv = b'0000000000000000' # 定义初始化向量
cipher = AES.new(key, AES.MODE_CBC, iv) # 创建加密器
# 加密数据并填充到16字节的整数倍
pad_data = data + (16 - len(data) % 16) * chr(16 - len(data) % 16)
cipher_data = cipher.encrypt(pad_data.encode()) # 加密
# 将加密后的数据进行base64编码并返回
return base64.b64encode(cipher_data).decode()
# 定义解密函数
def decrypt(key, data):
iv = b'0000000000000000' # 定义初始化向量
cipher = AES.new(key, AES.MODE_CBC, iv) # 创建解密器
# 先对数据进行base64解码再进行解密
plain_data = cipher.decrypt(base64.b64decode(data.encode())).decode()
# 去掉填充的部分并返回解密后的数据
return plain_data[:-ord(plain_data[-1])]
# 测试
if __name__ == '__main__':
key = b'0123456789abcdef' # 定义密钥
data = 'Hello World!' # 待加密数据
encrypted_data = encrypt(key, data) # 加密
print('加密后的数据:', encrypted_data)
decrypted_data = decrypt(key, encrypted_data) # 解密
print('解密后的数据:', decrypted_data)
```
在实现过程中,使用了pycryptodome库提供的AES模块进行加解密操作。其中,加密时使用了CBC模式,并且在加密前先对数据进行了填充,以保证数据长度为16字节的整数倍。解密时,先对数据进行base64解码,再进行解密操作,最后去掉填充的部分即可得到原始数据。
阅读全文