Python实现图像加密与解密工具
Python实现图像加密与解密工具
一、整体思路
- 加密思路
- 读取图像文件,将图像数据转换为可以处理的格式(例如字节流)。
- 选择一种加密算法,如AES(Advanced Encryption Standard)对称加密算法。
- 生成加密密钥,使用密钥对图像数据进行加密操作。
- 将加密后的图像数据保存为新的文件。
- 解密思路
- 读取加密后的图像文件。
- 使用与加密时相同的密钥,对加密数据进行解密操作。
- 将解密后的图像数据还原为图像格式并保存。
二、所需库
Pillow
库- 用于图像的读取、处理和保存。可以使用
pip install Pillow
进行安装。
- 用于图像的读取、处理和保存。可以使用
pycryptodome
库- 用于实现加密和解密算法,如AES。安装命令为
pip install pycryptodome
。
- 用于实现加密和解密算法,如AES。安装命令为
三、加密代码实现
from Crypto.Cipher import AES
from PIL import Image
import os
import io
def pad(data):
block_size = AES.block_size
padding_size = block_size - len(data) % block_size
padding = bytes([padding_size] * padding_size)
return data + padding
def encrypt_image(input_image_path, output_image_path, key):
cipher = AES.new(key, AES.MODE_ECB)
with Image.open(input_image_path) as im:
image_bytes = io.BytesIO()
im.save(image_bytes, format='PNG')
image_data = image_bytes.getvalue()
padded_data = pad(image_data)
encrypted_data = cipher.encrypt(padded_data)
with open(output_image_path, 'wb') as f:
f.write(encrypted_data)
四、解密代码实现
def unpad(data):
padding_size = data[-1]
return data[:-padding_size]
def decrypt_image(input_image_path, output_image_path, key):
cipher = AES.new(key, AES.MODE_ECB)
with open(input_image_path, 'rb') as f:
encrypted_data = f.read()
decrypted_data = cipher.decrypt(encrypted_data)
unpadded_data = unpad(decrypted_data)
with Image.open(io.BytesIO(unpadded_data)) as im:
im.save(output_image_path)
五、使用示例
# 生成16字节的密钥(AES - 128位)
key = os.urandom(16)
# 加密图像
encrypt_image('input.png', 'encrypted.png', key)
# 解密图像
decrypt_image('encrypted.png', 'decrypted.png', key)
请注意:
- 这里的示例使用了AES的ECB(Electronic Codebook)模式,在实际应用中,ECB模式可能存在安全性问题,可以考虑使用更安全的模式如CBC(Cipher - Block Chaining)模式。
- 密钥的管理在实际应用中非常重要,这里只是简单地使用随机生成的密钥,在实际场景中可能需要更安全的密钥生成、存储和分发机制。
原文地址:https://blog.csdn.net/QQ_778132974/article/details/142964694
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!