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

时间:2014-11-24 00:27:22

标签: php c encryption aes

我尝试了来自openssl wiki的this code,它通过aes-256算法生成密文。 输入纯文本的长度为512字节。然而,输出的长度是不同的。 PHP生成一个长度为512字节的输出,而C生成一个528字节长的密文。

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

1 个答案:

答案 0 :(得分:1)

你应该查找,例如mcrypt_encrypt的评论部分使用PKCS#7填充方法填充明文消息。 PHP使用零填充到块边界上的第一个值,而不是通常使用的ad-hoc PKCS#7填充方法。

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