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

标签 php validation mcrypt

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

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

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

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


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

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

最佳答案

我通常这样做:

  • 散列输入数据(文件或消息或其他)。
  • 加密数据。
  • 在加密数据前加上数据的 IV 和哈希值。
  • 发送或存储 IV + 哈希 + 密文。

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

在接收端或读取端:

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

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

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

关于PHP mcrypt_decrypt - 我可以确定数据是否使用正确的 key 解密吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292658/

相关文章:

php - Symfony 4 : You have requested a non-existent parameter "locale"

php - 连接彼此不相关的表 Laravel

validation - Google 表格 - 数据验证 - 使用范围列表中的公式

.net - 创建 sha1 哈希时如何使用 machineKey validationKey?

php - Laravel-4 验证

php - Python 相当于 PHP Mcrypt

php - 使用 Blowfish 和 ECB 将 mcrypt 迁移到 OpenSSL

php - 我如何在 php 中组织可下载的 csv 文件

PHP/MYSQL 着色名称

php - 启用 mcrypt、soap 和 pdo_mysql