# hash_equals

(PHP 5 >= 5.6.0, PHP 7)

hash_equals — 可防止时序攻击的字符串比较

### 说明

hash_equals ( string `$known_string` , string `$user_string` ) : bool

比较两个字符串，无论它们是否相等，本函数的时间消耗是恒定的。

本函数可以用在需要防止时序攻击的字符串比较场景中， 例如，可以用在比较 crypt() 密码哈希值的场景。

### 参数

`known_string`

  已知长度的、要参与比较的 string

`user_string`

  用户提供的字符串

### 返回值

当两个字符串相等时返回 `TRUE`，否则返回 `FALSE`。

### 错误／异常

如果所提供的 2 个参数中任何一个不是字符串， 会导致 `E_WARNING` 消息。

### 范例

Example #1 hash_equals() 例程

    <?php
    $expected  = crypt('12345', '$2a$07$usesomesillystringforsalt$');
    $correct   = crypt('12345', '$2a$07$usesomesillystringforsalt$');
    $incorrect = crypt('apple',  '$2a$07$usesomesillystringforsalt$');

    var_dump(hash_equals($expected, $correct));
    var_dump(hash_equals($expected, $incorrect));
    ?>

以上例程会输出：

    bool(true)
    bool(false)

### 注释

> Note:

> 要想成功进行比较，那么所提供的 2 个参数必须是相同长度的字符串。 如果所提供的字符串长度不同，那么本函数会立即返回 `FALSE`， 在时序攻击的场景下，已知字符串的长度可能会被泄露。

> Note:

> 非常重要的一点是，用户提供的字符串必须是第二个参数。