Эта ошибка означает, что значение, которое 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