You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Lambda中用Python cryptography解密JS-AES加密值?

使用Python cryptography解密JS AES加密值(适配AWS Lambda)

你的加密值是OpenSSL Salted AES格式(常见于CryptoJS等JS加密库),以下是用cryptography库解密的步骤和代码:

核心逻辑

  1. 解码Base64字符串,分离出salt和密文(前8字节是固定标识"Salted__",接下来8字节是salt,剩余为密文)
  2. 通过PBKDF2HMAC算法,从密码和salt推导AES密钥和IV(CryptoJS默认用SHA1、1000次迭代生成32位密钥+16位IV)
  3. 用AES-CBC模式解密,处理PKCS7填充

解密代码

import base64
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding

def decrypt_aes(encrypted_b64, password):
    # 解码Base64
    encrypted_data = base64.b64decode(encrypted_b64)
    # 分离标识、salt、密文
    assert encrypted_data[:8] == b"Salted__"
    salt = encrypted_data[8:16]
    ciphertext = encrypted_data[16:]
    
    # 推导密钥和IV(CryptoJS默认参数)
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA1(),
        length=48,  # 32位key + 16位IV
        salt=salt,
        iterations=1000,
        backend=default_backend()
    )
    key_iv = kdf.derive(password.encode('utf-8'))
    key = key_iv[:32]
    iv = key_iv[32:]
    
    # AES-CBC解密
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize()
    
    # 去除PKCS7填充
    unpadder = padding.PKCS7(128).unpadder()
    plaintext = unpadder.update(padded_plaintext) + unpadder.finalize()
    
    return plaintext.decode('utf-8')

# 替换为你加密时用的密码
PASSWORD = "your_encryption_password"
encrypted_value = "U2FsdGVkX1+i0YtqcKW4tsI3witHU65dqIkgYGptHT0="
print(decrypt_aes(encrypted_value, PASSWORD))

AWS Lambda适配说明

  • Lambda的Python 3.8及以上环境默认预装了cryptography库,无需额外导入层
  • 如果遇到库缺失问题,可自行打包cryptography层:
    • 本地执行mkdir -p python/lib/python3.x/site-packages(替换x为Lambda用的Python版本)
    • 执行pip install cryptography -t python/lib/python3.x/site-packages
    • 将python目录打包为zip,上传到Lambda层并关联到函数

内容的提问来源于stack exchange,提问作者Reema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:45:16