我尝试了来自openssl wiki的this code,它通过aes-256算法生成密文。 输入纯文本的长度为512字节。然而,输出的长度是不同的。 PHP生成一个长度为512字节的输出,而C生成一个528字节长的密文。
为什么存在这样的差异?如何使用aes-256算法加密PHP中的文本然后在C中解密呢?
答案 0 :(得分:1)
你应该查找,例如mcrypt_encrypt
的评论部分使用PKCS#7填充方法填充明文消息。 PHP使用零填充到块边界上的第一个值,而不是通常使用的ad-hoc PKCS#7填充方法。
零填充的问题在于,对于可能以00
字节值结尾的消息,它不具有确定性,因为在取消填充期间可能会将其删除。