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

时间:2015-01-06 14:41:14

标签: php encryption binary aes

我周末一直在使用php mcrypt,AES用于使用密钥加密文本字符串。
后来我用一个很小的php工具用AES / mcrypt加密/解密你的字符串,当密钥是"错误"并且文本没有被解密,你最终得到我认为是二进制文件的内容(http://i.imgur.com/jF8cZMZ.png),无论如何在PHP中检查变量是否包含二进制或正确解码的字符串?

如果标题和介绍有点误导,我很抱歉。

1 个答案:

答案 0 :(得分:0)

当您加密文本然后尝试解密它时,您将获得相同的文本,但是当您尝试解密随机数据时,结果很可能是文本(随着数据的长度而减少)。您尚未指定我们正在讨论的数据类型,但通过应用启发式确定解密是否成功是一个坏主意。它很慢并且可能导致误报。

您应该有校验和或类似的东西来确定解密结果是否有效。这可以通过在明文数据上运行sha1,将结果预先添加到文本并作为整体加密来轻松完成。当您解密它时,您可以拆分(sha1输出具有固定大小,因此您知道在哪里拆分)生成的字符串在文本部分上运行sha1并与散列部分进行比较。如果匹配,则表示您的结果有效。当然,您可以使用SHA-256或SHA-512来提高安全性。

这只是一种做法,但可能不是最好的。更好的方法是对AES(如GCM或CCM)使用经过身份验证的操作模式,或者使用具有良好MAC功能的encrypt-then-MAC,如HMAC-SHA512。

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

相关问题