2011-05-25 74 views
3

我试图用控制台上的openssl进行加密以匹配另一个AES实现生成的输出。所有细节都是已知的。我在128位CBC模式下使用AES。奇怪的是,无论文件大小如何,输出都会增大16个字节。我认为openssl正在追加某种填充。openssl AES加密将字节块大小添加到输出

在其他实现的方向上,它不是什么大问题,因为我可以放弃最后的16个字节,但另一方面是因为我无法发明openssl可能检查有效性的字节。

我该如何告诉openssl不要这样做?

命令行:

openssl enc -aes-128-cbc -K <pre-shared key in hex> -in rawfile.bin -out encfile.enc -iv <pre-shared IV in hex> 
+1

是否可以包含IV? (在这种情况下,它们可能会在开始时插入,而不是结束) – sehe 2011-05-25 15:43:19

+0

不太可能。 05 15是1d 9a fb 4c 54 a2 03 90 97 3f 58 28 d8是被加密的0字节文件的十六进制转储,与用同一个IV加密的32字节文件的第一行或最后一行不匹配。我希望它匹配。不排除它最后对IV进行加密,但那是行不通的。我认为它正在加密可能包含文件长度的各种填充。难以比较,因为它是cbc。 – dascandy 2011-05-25 15:44:40

回答

2

openssl enc-nopad选项。我没有使用它,但听起来相关。

+0

不希望他们让文档更清晰一些。我看了他们一会儿,但在弄清楚命令行之后,我没有看得更远。谢谢! – dascandy 2011-05-25 16:07:50

+0

是的 - 这是有效的,但只有当你有适当的输入大小(否则你得到'5539:错误:0607F08A:数字包络例程:EVP_EncryptFinal_ex:数据不是块长度的倍数:evp_enc.c:228:') – sehe 2011-05-25 17:57:30

+0

我是自己做填充因此它总是合适的。 – dascandy 2011-05-25 22:32:39