当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
)
也许有人知道这个问题。我已经好几天了。
答案 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
我希望它有用