AES_cfb128_encrypt并使用openssl命令解密

时间:2017-06-29 10:24:01

标签: c unix encryption openssl cryptography

我正在使用以下openssl函数加密数据文件

KEY="123456KEY";
IVEC="123456IVEC"

AES_set_encrypt_key(KEY, 128, &key);
AES_cfb128_encrypt(indata, outdata, bytes_read, &key, IVEC, &num, AES_ENCRYPT);

因此我加密了文件 file.tgz.enc ,我可以使用相同的 AES_cfb128_encrypt(AES_DECRYPT)函数解密此文件,但我想要解密此文件使用命令行openssl命令。我想尝试

======
COMMAND
======
/usr/bin/openssl enc -aes-128-cbc -d -in file.tgz.enc -out
new-file.tgz -K 123456KEY -iv 123456IVEC
======
OUTPUT
======
non-hex digit
invalid hex iv value

我在命令行上收到错误,例如非十六进制数字,无效的十六进制iv值,我无法解密该文件。 任何的想法 ?有人可以指导我吗?

1 个答案:

答案 0 :(得分:1)

-K和-iv需要十六进制字符,并且您指定的输入在K以及Y123456KEY中包含非十六进制字符IV 123456IVEC

您需要将正确的16字节密钥传递给AES_cfb128_encrypt,并将初始化向量传递给AES_cfb128_encrypt 但KEY只有9个字节,如果KEY(变量)的大小也是9,则可能导致未定义的行为,因为AES_set_encrypt_key将继续从KEY读取128个字符(16个字节)

无论您在代码中使用哪个键和IV,都需要使用其十六进制表示并在openssl命令工具中使用它