自学内容网 自学内容网

Python实现图像加密与解密工具

Python实现图像加密与解密工具

一、整体思路

  1. 加密思路
    • 读取图像文件,将图像数据转换为可以处理的格式(例如字节流)。
    • 选择一种加密算法,如AES(Advanced Encryption Standard)对称加密算法。
    • 生成加密密钥,使用密钥对图像数据进行加密操作。
    • 将加密后的图像数据保存为新的文件。
  2. 解密思路
    • 读取加密后的图像文件。
    • 使用与加密时相同的密钥,对加密数据进行解密操作。
    • 将解密后的图像数据还原为图像格式并保存。

二、所需库

  1. Pillow
    • 用于图像的读取、处理和保存。可以使用pip install Pillow进行安装。
  2. pycryptodome
    • 用于实现加密和解密算法,如AES。安装命令为pip install pycryptodome

三、加密代码实现

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)


请注意:

  1. 这里的示例使用了AES的ECB(Electronic Codebook)模式,在实际应用中,ECB模式可能存在安全性问题,可以考虑使用更安全的模式如CBC(Cipher - Block Chaining)模式。
  2. 密钥的管理在实际应用中非常重要,这里只是简单地使用随机生成的密钥,在实际场景中可能需要更安全的密钥生成、存储和分发机制。

原文地址:https://blog.csdn.net/QQ_778132974/article/details/142964694

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!