Bash openssl AES加密为输出添加了相当于字节的块大小

Bash openssl AES加密为输出添加了相当于字节的块大小,bash,cryptography,openssl,aes,Bash,Cryptography,Openssl,Aes,我试图在控制台上使用openssl加密,以匹配AES的另一个实现生成的输出。所有细节都是已知的。我在128位CBC模式下使用AES。奇怪的是,不管文件大小如何,输出都会大16字节。我认为openssl添加了某种填充 在另一个实现的方向上,这不是一个很大的问题,因为我可以删除最后16个字节,但另一方面,我不能发明openssl可能会检查有效性的字节 我如何告诉openssl不要这样做 命令行: openssl enc -aes-128-cbc -K <pre-shared key in he

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

在另一个实现的方向上,这不是一个很大的问题,因为我可以删除最后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>
openssl enc-aes-128-cbc-K-in-rawfile.bin-out-encfile.enc-iv

openssl enc
有一个
-nopad
选项。我没用过,但听起来很有关系

-nopad
    disable standard block padding

是否包括静脉注射?(在这种情况下,它们可能会插入开头,而不是结尾)不太可能。05 15 be 1d 9a fb 4c 54 a2 03 90 97 3f 58 28 d8是正在加密的0字节文件的hexdump,它与使用相同IV加密的32字节文件的第一行或最后一行不匹配。我希望它匹配。不排除它最后加密了静脉,但那是行不通的。我认为这是加密可能包括文件长度的填充。很难比较,因为它是cbc。真希望他们能把文档弄清楚一点。我看了他们一段时间,但在弄清楚了命令行之后,我没有看得更远。谢谢是的-这是可行的,但只有当你有合适的输入大小(否则你会得到
5539:error:0607F08A:digital信封例程:EVP_EncryptFinal\u ex:data不是块长度的倍数:EVP_encc.c:228:
)我自己填充,所以它总是合适的。对于PHP用户来说,这是OPENSSL_ZERO_填充选项,例如
openssl_encrypt($plaintext、$cipher、$key、$options=openssl_RAW_DATA | openssl_ZERO_PADDING,$iv)