AES-128-CBC解密TS文件遇EVP_DecryptFinal_ex:bad decrypt报错求助
解决AES-128-CBC解密.ts文件失败(输出0字节+Bad Decrypt报错)的问题
从你给出的报错信息和命令来看,问题主要出在密钥/IV的格式不正确,还有可能是.ts文件的合并方式不对,下面一步步帮你排查解决:
1. 先解析报错原因
the hex string is too short, padding with zero bytes to the length:这个提示直接说明你提供的密钥(或IV)长度不够。AES-128要求密钥是128位(16字节),对应32个十六进制字符;IV同样需要16字节(32个十六进制字符)。你用的-K 313863756468736b63646b6a616b只有28个字符,OpenSSL会自动补零凑够长度,但这必然导致密钥和加密时使用的不匹配,直接引发解密失败。bad decrypt:这是密钥/IV不匹配、输入文件无效(比如合并错误)的典型报错,最终导致OpenSSL无法生成有效解密内容,输出0字节文件。
2. 关键修正步骤
(1)补全密钥和IV的正确格式
- 密钥:找到完整的32位十六进制密钥(比如你当前的密钥缺4个字符,需要确认加密方使用的完整密钥)。
- IV:不要只写
-iv 0,如果加密时用的是全零IV,要写成-iv 00000000000000000000000000000000(32个0);如果是其他值,必须用完整的32位十六进制字符串。
修正后的命令示例(假设补全后的密钥是313863756468736b63646b6a616b1234):
openssl aes-128-cbc -d -in D:\Test\joined_files.ts -out D:\Test\decrypt_I00100000.ts -iv 00000000000000000000000000000000 -K 313863756468736b63646b6a616b1234 -md SHA256
(2)检查.ts文件的合并方式
很多加密的流媒体.ts文件是每个片段单独加密的(每个片段有自己的IV),这种情况下不能直接合并所有加密的.ts文件再解密——必须先逐个解密每个.ts片段,再把解密后的片段合并成完整文件。
你可以先拿单个.ts文件测试解密:
openssl aes-128-cbc -d -in D:\Test\单个片段.ts -out D:\Test\解密后的单个片段.ts -iv <正确的IV> -K <正确的密钥> -md SHA256
如果单个文件能解密成功,就说明你之前的合并顺序错误,应该换“先解密再合并”的流程。
(3)可选:调整哈希算法参数
有些OpenSSL版本默认的哈希算法和加密时使用的不一致,你可以尝试去掉-md SHA256参数,看看是否能解密成功:
openssl aes-128-cbc -d -in D:\Test\joined_files.ts -out D:\Test\decrypt_I00100000.ts -iv <完整IV> -K <完整密钥>
3. 额外排查点
- 确认合并后的.ts文件没有损坏:可以用文件查看工具(比如Notepad++的十六进制插件)检查文件头部,看是否符合AES-CBC加密后的格式(通常前16字节是IV,但如果是多片段合并,会有多个IV段)。
- 确认你使用的OpenSSL版本兼容:不同版本的OpenSSL在加密解密参数上可能有细微差异,建议使用较新的稳定版本。
内容的提问来源于stack exchange,提问作者shantanu goel
相关产品推荐
相关产品推荐

