Encryption 使用openssl C API加密的文件可以';不能通过命令行openssl进行解密

Encryption 使用openssl C API加密的文件可以';不能通过命令行openssl进行解密,encryption,openssl,Encryption,Openssl,我使用AES 256 cbc加密。我可以用openssl C API加密并成功解密该文件。但是,当我尝试使用命令行解密由C API加密的文件时,解密将提供错误的输出。 以下是我正在使用的命令行: openssl enc -d -aes-256-cbc -in ./input.bin -K "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" -iv "00112233445566778899aabbccddeeff"

我使用AES 256 cbc加密。我可以用openssl C API加密并成功解密该文件。但是,当我尝试使用命令行解密由C API加密的文件时,解密将提供错误的输出。 以下是我正在使用的命令行:

openssl enc -d -aes-256-cbc -in ./input.bin -K "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" -iv "00112233445566778899aabbccddeeff" -nopad > output.txt
我运行带有和不带–nopad选项的命令。如果没有这个选项,我会得到错误“数字信封例程:EVP_DecryptFinal_ex:bad decrypt”。 当我使用C API时,我使用的是相同的IV和键:

unsigned char key[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
                       0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
unsigned char iv[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
命令行加密和C API加密兼容吗?或者我是否缺少命令行中的任何可选参数或C API中的设置,以使加密/解密在命令行和C API之间互操作? 谢谢你的帮助

编辑: input.bin包含以下数据(以十六进制显示):


您的示例实际上是在ECB模式下加密的。。我刚刚用一个在线工具取消了输入:

76 65 72 79 20 73 68 6f 72 74 31 32 33 34 35 36  very short123456
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 

您能用用于加密的密钥和IV发布C实现中的密文示例吗?这可能是一个文件格式问题;命令行工具支持从输入文件中提取元数据,如用于密钥派生的salt。我编辑了问题并发布了文件的内容是您的纯文本的“vtPJd&”部分吗?纯文本(和预期的)是“非常短的123456”。我在使用openssl C API时得到这个字符串。对于该密钥和IV,不带填充,密码文本应该是
2ec58c22b1ecfecbfecdc114e1282f17b
(十六进制)。0x10字节的填充将加密到
f13a128c2fd85d1f0e2f13ce22550285
.OMG。对谢谢你使用了什么在线工具?
76 65 72 79 20 73 68 6f 72 74 31 32 33 34 35 36  very short123456
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10