对Apple的HTTP直播流使用openssl加密 - 问题

Or *_*ren 1 encryption streaming openssl aes

这是我的shell脚本的代码,static.key包含我的随机密钥.

hexKey=$(cat static.key | hexdump -e '16/1 "%02x"')
echo $hexKey
hexIV="0"
echo $hexIV
openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K ${he-iv ${hexIV}
Run Code Online (Sandbox Code Playgroud)

运行时我遇到一些错误.

(output:
non-hex digit
invalid hex iv value
: command not found
)
Run Code Online (Sandbox Code Playgroud)

也许有人知道这个问题.我已经好几天了.

ind*_*div 8

该错误意味着OpenSSL对IV的值包含非十六进制字符(即,除了0123456789abcdefABCDEF之外的其他内容).

AES128密钥是128/8 = 16字节,因此密钥应该有32个字符.IV是16个字节,对应于AES块大小,OpenSSL会将单个"0"转换为16个零字节.这是一个很好的命令的例子:

$ echo -n "hello" > in
$ openssl aes-128-cbc -e -in in -out out -p -nosalt \
  -K 000102030405060708090a0b0c0d0e0f -iv 000102030405060708090a0b0c0d0e0f
$ cat out | hexdump -e '16/1 "%02x"'
8326dc340c564d49790650a59260fea0
Run Code Online (Sandbox Code Playgroud)

现在用非十六进制字符替换IV的最后一个字符,并看到你得到的错误相同.

$ openssl aes-128-cbc -e -in in -out out -p -nosalt \
  -K 000102030405060708090a0b0c0d0e0f -iv 000102030405060708090a0b0c0d0e0q
$ cat out | hexdump -e '16/1 "%02x"'
non-hex digit
invalid hex iv value
Run Code Online (Sandbox Code Playgroud)

如果您粘贴的是您正在运行的真实代码,则问题很明显.首先,这-K ${he-iv ${hexIV}意味着什么?其次,论证-K是给出关键.你错过-iv了给IV.你甚至错过了一个闭合支撑.

假设static.key有16个字节,这可能会解决您的问题:

openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K $hexKey -iv $hexIV
Run Code Online (Sandbox Code Playgroud)

作为最后一个提示,如果你正在使用bash,那么运行你的脚本-x作为bash的参数,它将在它扩展变量后打印它执行的每一行,这样你就可以看到它正在做什么:

$ /bin/bash -x my_script
+ hexKey=0
+ hexIV=0
+ openssl aes-128-cbc -e -in in -out out -p -nosalt -K 0 -iv 0
Run Code Online (Sandbox Code Playgroud)