问题是您正在为 IV 和密钥指定文件,而 openssl 期望在命令行上以十六进制形式提供值。
例如,我试图解密 M3U8 流 (HLS),密钥 16 字节文件包含无法在运行时通过键盘输入的不可打印字符(省略 -K 从键盘获取密钥)。
-rw-r--r--@ 1 Mufasa staff 16 Apr 17 10:45 sequence146094144.key
-rw-r--r-- 1 Mufasa staff 3272528 Apr 17 10:48 sequence146094161.ts
所以我将密钥文件转换为十六进制:
hexdump -e '16/1 "%02x" "\n"' sequence146094144.key
8d2aeccbefb0955ec9a75f2f051faa6e
我的 IV 已经以十六进制提供,所以我只是删除了0x
:
IV=0x00000000000000000000000008B53851
结果是此命令成功解密了 .ts 文件:
openssl aes-128-cbc -d -in sequence146094161.ts -out output.ts -iv 00000000000000000000000008B53851 -K 8d2aeccbefb0955ec9a75f2f051faa6e
使用 ffprobe 检查输出:
ffprobe output.ts
ffprobe version 2.8.git Copyright (c) 2007-2016 the FFmpeg developers
built with Apple LLVM version 7.0.2 (clang-700.1.81)
...
Input #0, mpegts, from 'output.ts':
Duration: 00:00:10.04, start: 8414.107644, bitrate: 2607 kb/s
Program 1
Stream #0:0[0x1e1]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], Closed Captions, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1e2](und): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 60 kb/s
Stream #0:2[0x100]: Unknown: none ([134][0][0][0] / 0x0086)
我的文件在 VLC 中播放。就您而言,如果iv.bin
您生成的文件是纯文本十六进制字符串,请按原样在命令行上使用十六进制值,无需进一步转换。如果它看起来不是十六进制,则直接从文件将其转换为十六进制。同样的逻辑sessionkey.bin
您生成的文件。