如何验证解密结果是否正确?

How to verify that the decryption result is correct?

周末我一直在研究 php mcrypt,AES 用于使用密钥加密文本字符串。
后来我开发了一个小的 php 工具来加密/解密你的字符串 AES/mcrypt 现在当密钥是 "wrong" 并且文本没有被解密时,你结束了根据我所读到的(http://i.imgur.com/jF8cZMZ.png)我认为是二进制的内容,在 PHP 中是否有检查变量是否包含二进制或正确解码的字符串?

如果标题和简介有点误导,我深表歉意。

当你加密文本然后尝试解密它时,你会得到相同的文本,但是当你尝试解密随机数据时,结果是文本的可能性很小(随着数据长度的增加而减少) .您没有指定我们正在谈论的数据类型,但是通过应用启发式方法确定解密是否成功是一个坏主意。它很慢,可能会导致误报。

您应该有一个校验和或类似的东西来确定解密结果是否有效。这可以通过 运行ning sha1 在纯文本数据上轻松完成,将结果添加到文本之前并将其作为一个整体加密。当你解密它时,你可以在文本部分拆分(sha1 输出具有固定大小,所以你知道在哪里拆分)结果字符串 运行 sha1 并与哈希部分进行比较.如果它匹配你有一个有效的结果。您当然可以使用 SHA-256 或 SHA-512 稍微提高安全性。

这只是一种方法,但可能不是最好的方法。更好的方法是对 AES 使用经过身份验证的操作模式,如 GCM 或 CCM,或者使用 encrypt-then-MAC 和一个好的 MAC 函数,如 HMAC-SHA512.

通过使用上述方法,您可以自由使用任何类型的数据进行加密,因为您不再局限于确定它是否是文本。