【发布时间】:2011-11-09 16:42:44
【问题描述】:
我正在编写一个 php 脚本,并正在使用 mcrypt 加密/解密任意数据。
当我使用另一个密钥解密加密数据时(例如,我输入了错误的密码),输出当然不会被正确解密。
如果使用了错误的键,我想显示一条错误消息,但我认为很难将输出字符串验证为正确的“纯文本”(因为编码数据中的字符也可以作为输入有效)数据)。
有没有办法解决这个问题?
在我写这个问题的时候,我有了一个想法:)
我是否可以在输入数据前加上一个静态“控制”字符串,并在解密时使用它进行验证?
【问题讨论】:
-
你有没有想过在解密之前使用哈希来验证密钥?
-
编辑:我没有保存密钥的任何校验和(在数据库等中),所以在我的情况下不能这样做吗?
-
基本上,除了加密数据之外,您还存储原始密钥的哈希值。然后在使用给定密钥解密加密数据之前,使用相同的哈希算法计算给定密钥的哈希值,并将结果与存储的哈希值进行比较。如果散列相同,则键也(很可能)相同。 (另见integrity verification using cryptographic hash functions)
-
我不建议在加密数据之外存储密钥的哈希值。如果攻击者可以对哈希进行尝试而不是解密整个文件,那么攻击者可以更容易地使用暴力破解密码。
标签: php validation mcrypt