Использование шифрования openssl для HTTP Live Streaming от Apple - проблема - PullRequest
1 голос
/ 30 декабря 2010

Это мой код сценария оболочки, когда 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}

Я получаю ошибку при запуске.

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

Может быть, кто-то знает проблему. Я нахожусь на этом в течение нескольких дней.

Ответы [ 3 ]

8 голосов
/ 30 декабря 2010

Эта ошибка означает, что значение, которое 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 голос
/ 06 декабря 2012

В процессе хранения значения ключа в оболочке bash был добавлен некоторый конечный мусор (либо ноль, либо перевод строки), который передается в openssl и вызывает жалобу на не шестнадцатеричные символы.

Чтобы исправить это для шестнадцатеричных ключей и IV для 128-битных / 32-символьных символов ascii, попросите 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 «ключи печати» -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
0 голосов
/ 12 сентября 2016

Я боролся с этим, в основном я нашел это решение:

Шифрование:

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

Я надеюсь, что это может быть полезно

...