python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python图片和js前端加密解密

Python对图片和js前端进行加密解密的技术实现

作者:detayun

Python可以对图片进行加密,前端JS进行解密,但需满足算法兼容性、密钥安全传递、数据格式处理三大核心条件,这篇文章从技术实现、安全性、典型方案三方面详细说明,需要的朋友可以参考下

Python可以对图片进行加密,前端JS进行解密,但需满足算法兼容性、密钥安全传递、数据格式处理三大核心条件。以下从技术实现、安全性、典型方案三方面详细说明:

1. 技术实现:跨语言加解密兼容性

对称加密算法选择

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.backends import default_backend
import os

key = os.urandom(32)  # AES-256密钥
iv = os.urandom(16)   # IV
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()

# 读取图片为二进制数据
with open("image.jpg", "rb") as f:
    image_data = f.read()

# PKCS7填充
padder = padding.PKCS7(128).padder()
padded_data = padder.update(image_data) + padder.finalize()
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()

# 将加密后的数据(含密钥、IV)传输给前端
async function decryptImage(encryptedData, key, iv) {
    const decoder = new TextDecoder();
    const encryptedBytes = new Uint8Array(encryptedData);
    const ivBytes = new Uint8Array(iv);
    const keyBytes = new Uint8Array(key);

    const decoded = await crypto.subtle.decrypt(
        { name: "AES-CBC", iv: ivBytes },
        await crypto.subtle.importKey(
            "raw", keyBytes, "AES-CBC", false, ["decrypt"]
        ),
        encryptedBytes
    );

    // 去除PKCS7填充并生成图片
    const decryptedData = new Uint8Array(decoded);
    const blob = new Blob([decryptedData], { type: "image/jpeg" });
    const imgUrl = URL.createObjectURL(blob);
    document.getElementById("decryptedImage").src = imgUrl;
}

2. 安全性关键点

3. 典型场景与限制

4. 替代方案建议

总结

以上就是Python对图片和js前端进行加密解密的技术实现的详细内容,更多关于Python图片和js前端加密解密的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文