python AES图像加密
时间: 2023-09-05 14:06:48 浏览: 189
以下是一个使用AES算法对图像进行加密和解密的Python示例代码:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from PIL import Image
# 加密函数
def encrypt_image(image_file, key):
# 打开图像文件并读取图像数据
with open(image_file, "rb") as f:
image_data = f.read()
# 初始化AES加密器
aes_cipher = AES.new(key, AES.MODE_ECB)
# 对图像数据进行加密并返回加密后的数据
encrypted_image_data = aes_cipher.encrypt(pad(image_data, AES.block_size))
return encrypted_image_data
# 解密函数
def decrypt_image(encrypted_image_data, key):
# 初始化AES解密器
aes_cipher = AES.new(key, AES.MODE_ECB)
# 对加密后的图像数据进行解密并返回解密后的数据
decrypted_image_data = unpad(aes_cipher.decrypt(encrypted_image_data), AES.block_size)
return decrypted_image_data
# 测试加密解密函数
if __name__ == '__main__':
# 密钥长度必须是16、24或32字节,这里使用长度为16字节的密钥
key = b'0123456789abcdef'
# 读取原始图像文件
original_image = Image.open("original_image.png")
# 加密图像文件并保存
encrypted_image_data = encrypt_image("original_image.png", key)
with open("encrypted_image.png", "wb") as f:
f.write(encrypted_image_data)
# 解密图像文件并保存
decrypted_image_data = decrypt_image(encrypted_image_data, key)
decrypted_image = Image.frombytes(original_image.mode, original_image.size, decrypted_image_data)
decrypted_image.save("decrypted_image.png")
```
在上面的代码中,我们使用了Python的`Crypto`和`PIL`库。`Crypto`库提供了AES加密算法的实现,`PIL`库则提供了对图像文件的读写和处理功能。在加密和解密函数中,我们使用AES算法对图像数据进行加密和解密。由于AES算法要求输入数据长度必须是16字节的倍数,因此我们使用`Crypto.Util.Padding`库中的`pad`和`unpad`函数对数据进行填充和去除填充。在测试函数中,我们读取原始图像文件,使用密钥对其进行加密并保存为加密后的图像文件,然后再使用同样的密钥对加密后的图像文件进行解密,最后保存为解密后的图像文件。
阅读全文