为什么 php 通过 mcrypt_encrypt() 生成的密文长度与 C 通过 openssl 加密库生成的密文长度


Why the length of cipher text generated by php via mcrypt_encrypt() is different from the one generated by C via openssl encryption library

我从openssl wiki尝试了这段代码,它通过aes-256算法生成密码文本。输入纯文本的长度为 512 字节。然而,输出的长度是不同的。PHP 生成长度为 512 字节的输出,而 C 生成 528 字节长的密文。

为什么存在这样的差异,我如何使用 aes-256 算法在 PHP 中加密文本,然后在 C 中解密它?

您应该查找例如mcrypt_encrypt的评论部分,以使用 PKCS#7 填充方法填充纯文本消息。PHP 使用零填充到块边界上的第一个值,而不是通常使用的临时 PKCS#7 填充方法。

零填充的问题在于,对于可能以 00 字节值结尾的消息,它不是确定性的,因为在取消填充期间可能会删除该值。