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

Azure Databricks中Python调用OpenSSL解密AES-256-CBC文件失败

解决Azure Databricks中Python调用OpenSSL解密AES-256-CBC文件时的"bad decrypt"错误

错误原因分析

  • 核心问题:加密解密参数不匹配:原Shell加密命令明确指定了-md md5作为密钥派生的哈希算法,且未启用PBKDF2(使用OpenSSL旧版密钥派生逻辑)。你的Python解密代码要么缺失-md md5参数,要么错误添加了-pbkdf2,导致密钥/IV派生结果与加密时完全不一致,触发"bad decrypt"。
  • 函数变量引用错误:run_openssl_command函数定义了input_file和output_file参数,但命令中却引用全局变量encrypted_input_file和output_decrypted_file,导致参数传递失效,可能使用了错误的文件路径。
  • 文本模式处理二进制文件:原代码使用text=True处理加密文件,会导致二进制内容被错误转码,干扰解密逻辑。

修正后的Python解密代码

# OpenSSL version on Azure Databricks: OpenSSL 1.1.1f  31 Mar 2020
import subprocess

def run_openssl_command(input_file, output_file, random_key_file):
    # 构造与加密命令参数完全匹配的openssl解密命令
    openssl_cmd = [
        "openssl",
        "enc",
        "-d",
        "-a",
        "-aes-256-cbc",
        "-md", "md5",  # 必须和加密时指定的哈希算法一致
        "-in", input_file,  # 使用函数传入的参数,修正变量引用错误
        "-out", output_file,
        "-pass", f"file:{random_key_file}"
    ]

    # 用二进制模式执行命令,避免转码问题
    result = subprocess.run(openssl_cmd, capture_output=True, text=False)

    # 检查执行结果
    if result.returncode == 0:
        print("Decryption completed successfully.")
    else:
        print("Error occurred during decryption:")
        print(result.stderr.decode('utf-8'))

if __name__ == "__main__": 
    encrypted_input_file = "<encrypted_file.csv.dat>"
    output_decrypted_file = "<decrypted_data_file.csv>"
    random_key_file = "RANDOM.key"

    run_openssl_command(encrypted_input_file, output_decrypted_file, random_key_file)

关键修正点说明

  • 添加-md md5参数:加密时用该参数指定了密钥派生的哈希算法,解密时必须完全匹配,否则OpenSSL 1.1.1f会默认使用SHA-256,导致派生的密钥与加密时不一致。
  • 移除-pbkdf2参数:原加密命令未使用PBKDF2,解密时添加该参数会改变密钥派生逻辑,必然导致解密失败。
  • 修复变量引用错误:函数内使用传入的参数而非全局变量,确保文件路径正确传递。
  • 设置text=False:加密文件为二进制格式,该参数避免subprocess错误转码二进制内容,后续手动解码stderr输出即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:05:15