PHP mcrypt_decrypt - 我可以确定数据是否使用正确的密钥解密?

2024-04-28

我正在编写一个 php 脚本,并使用 mcrypt 来加密/解密任意数据。

当我使用另一个密钥解密加密数据时(例如,我输入了错误的密码),输出当然不会被正确解密。

如果使用了错误的密钥,我想显示一条错误消息,但我认为很难将输出字符串验证为正确的“明文”(因为编码数据中的字符作为输入数据也是有效的)。

有什么办法可以解决这个问题吗?


当我写这个问题时,我有了一个想法:)

我是否可以在输入数据前面加上静态“控制”字符串,并在解密时使用它进行验证?


我通常这样做:

  • 对输入数据(文件或消息或其他内容)进行哈希处理。
  • 加密数据。
  • 在加密数据前面添加 IV 和数据的哈希值。
  • 发送或存储 IV + 哈希 + 密文。

由于 IV 和散列的长度始终相同,因此无需添加填充或控制字符。

在接收或读取端:

  • 提取 IV。
  • 提取哈希值。
  • 提取并解密加密文本。
  • 对解密的数据进行哈希处理并检查其是否与提取的哈希值匹配。

所以,你存储源数据的哈希值,而不是密钥的哈希值。正如上面发表的评论者所说,泄露密钥的哈希值是一个漏洞,因为攻击者现在只需要在彩虹表中搜索它(它会在几秒钟内危及您的数据)。

存储控制字符串的想法也很好(当然更快),但它不能让您确认消息或数据确实未损坏,只能使用正确的密钥。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP mcrypt_decrypt - 我可以确定数据是否使用正确的密钥解密? 的相关文章

随机推荐