PHP hash_equals 哈希(Hash)函数

  • 定义和用法

    hash_equals - 可防止时序攻击的字符串比较
  • 版本支持

    PHP4 PHP5 PHP7
    不支持 v5.6.0+支持 支持
  • 语法

    hash_equals( string $known_string , string $user_string)
    hash_equals() 比较两个字符串,无论它们是否相等,本函数的时间消耗是恒定的。 本函数可以用在需要防止时序攻击的字符串比较场景中, 例如,可以用在比较 crypt() 密码哈希值的场景。
  • 参数

    参数 必需的 描述
    known_string 已知长度的、要参与比较的字符串
    known_string 用户提供的字符串
  • 返回值

    当两个字符串相等时返回 TRUE,否则返回 FALSE。
    如果所提供的 2 个参数中任何一个不是字符串, 会导致 E_WARNING 消息。
    注意: 要想成功进行比较,那么所提供的 2 个参数必须是相同长度的字符串。 如果所提供的字符串长度不同,那么本函数会立即返回 FALSE, 在时序攻击的场景下,已知字符串的长度可能会被泄露。
    注意: 非常重要的一点是,用户提供的字符串必须是第二个参数。
  • 示例

    $expected  = crypt("12345", "$2a$07$usesomesillystringforsalt$");
    $correct   = crypt("12345", "$2a$07$usesomesillystringforsalt$");
    $incorrect = crypt("apple",  "$2a$07$usesomesillystringforsalt$");
    var_dump(hash_equals($expected, $correct));
    echo "<br/>";
    var_dump(hash_equals($expected, $incorrect));
    
    尝试一下
  • 相关页面

    hash_hmac_algos() - 返回适用于hash_hmac的已注册哈希算法列表