Python中使用MODE_CFB模式进行图片加密及解密的示例代码
发布时间:2023-12-23 18:33:37
下面是一个在Python中使用MODE_CFB模式对图片进行加密和解密的示例代码。
from PIL import Image
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
def encrypt_image(image_path, password):
# 打开图片并转换为字节数组
image = Image.open(image_path)
image_bytes = image.tobytes()
# 生成一个16字节的随机初始向量
iv = get_random_bytes(16)
# 创建AES加密器并加密图片字节数组
cipher = AES.new(password, AES.MODE_CFB, iv)
encrypted_bytes = cipher.encrypt(image_bytes)
# 创建一个新的加密后的图片
encrypted_image = Image.frombytes('RGB', image.size, encrypted_bytes)
# 返回加密后的图片和初始向量
return encrypted_image, iv
def decrypt_image(encrypted_image, password, iv):
# 将加密后的图片转换为字节数组
encrypted_bytes = encrypted_image.tobytes()
# 创建AES解密器并解密图片字节数组
cipher = AES.new(password, AES.MODE_CFB, iv)
decrypted_bytes = cipher.decrypt(encrypted_bytes)
# 创建一个新的解密后的图片
decrypted_image = Image.frombytes('RGB', encrypted_image.size, decrypted_bytes)
# 返回解密后的图片
return decrypted_image
# 加密并保存图片
image_path = 'example.jpg'
password = b'ThisIsThePassword'
encrypted_image, iv = encrypt_image(image_path, password)
encrypted_image.save('encrypted_image.jpg')
# 解密并保存图片
decrypted_image = decrypt_image(encrypted_image, password, iv)
decrypted_image.save('decrypted_image.jpg')
此示例代码使用Pillow库(一个Python图像处理库)来处理图像,并使用pycryptodome库提供的AES加密算法。首先,我们打开要加密的图片并将其转换为字节数组。然后,我们生成一个16字节的随机初始向量,并使用给定的密码和初始向量创建一个AES加密器。使用加密器,我们对图片字节数组进行加密,并创建一个新的加密后的图片。然后,我们可以保存加密后的图片。
要解密图片,我们需要先将加密后的图片转换回字节数组。然后,我们使用相同的密码和初始向量创建一个AES解密器,并使用解密器对加密后的图片字节数组进行解密。最后,我们创建一个新的解密后的图片,并将其保存。
请注意,此示例代码仅用于示范目的,并未考虑到错误处理和安全性。在实际应用中,请确保采取适当的安全措施,并处理异常情况。
