php - hash_equals 和 strcmp 函数的区别

标签 php

hash_equals — 定时攻击安全字符串比较。
我想知道什么是定时攻击安全。

我看到了 hash_equals 的实现

$result = 0;
    for ($i = 0; $i < $len; $i++) {
        $result |= (ord($known_string[$i]) ^ ord($user_string[$i]));
    }
    // They are only identical strings if $result is exactly 0...
    return 0 === $result;

我想知道时间对比在哪里。

最佳答案

通常,字符串比较( strcmp== )会在第一个不匹配的字符处中断,因此如果您的密码是 12345并且攻击者提供 9xxxx然后 1xxxx ,她可以测量两次比较之间的时间差并推断出第二个字符串更正确(因为第二次比较花费了更多时间)。 hash_equals通过始终比较两个字符串的所有字符来消除这种类型的攻击,无论它们是否匹配。因此,越来越少的正确字符串将花费相同的时间。

关于php - hash_equals 和 strcmp 函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31043923/

相关文章:

php - 更改为 HTTPS 后重定向过多

php - 无法从 PHP 中的 DateTime 获取上个月 - 这是一个(相当大的)错误吗?

javascript - 获取选中下拉列表的数据

PHP 日期问题,无法转换 1970-01-01 之前的日期

javascript - 如何禁用 YouTube 的外部链接

javascript - 使用 CryptoJS 加密并使用 PHP 解密

mysql - 尝试更新时 PHP 出现重复条目​​错误

php - 警告 : Division By Zero Working on PHP and MySQL

javascript - 单击按钮时仅显示 $(this) 行表格数据

php - 非静态方法如何在本地主机上静态工作