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

时间:2010-12-29 21:48:34

标签: encryption streaming openssl aes

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

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}

运行时出现错误。

(output:
non-hex digit
invalid hex iv value
: command not found
)

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

3 个答案:

答案 0 :(得分: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

现在用非十六进制字符替换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

如果您粘贴的是您正在运行的真实代码,则问题很明显。首先,-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

作为最后一个提示,如果您正在使用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

答案 1 :(得分:1)

在将键值存储在bash shell中的过程中,包含了一些尾随垃圾(无论是null还是换行符),这些垃圾被传递给openssl并导致它抱怨非十六进制字符。

要修复128位/ 32 ascii字符十六进制密钥和IV,请告诉bash仅传递前32个字符(对于其他键或iv长度)将值从32更改为1/4关键还是iv)

openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K ${hexKey:0:32} -iv ${hexIV:0:32}

要验证是否传递了正确的值,请使用openssl的'print keys'-P选项(注意大写“-P”)

openssl aes-128-cbc -e -in logo-1.ts -out logo-enc-1.ts -p -nosalt -K ${hexKey:0:32} -iv ${hexIV:0:32} -P

答案 2 :(得分:0)

我一直在努力解决这个问题,基本上我找到了这个解决方案:

加密:

openssl aes-256-cbc -k “choose_password_to_encrypt” -in /path_to_your_file_to_encrypt/file_to_encrypt.extension_file -out /path_to_your_file_to_dencrypt/choose_name_file_after_decrypt.extension_file.enc -a

解密:

openssl aes-256-cbc -k “password_chose_to_encrypt” -in /path_to_your_file_to_dencrypt/choose_name_file_after_decrypt.extension_file.enc -d -a -out /path_to_your_file_to_encrypt/file_to_encrypt.extension_file

我希望它有用