<dfn id="yplay"><input id="yplay"></input></dfn>
  • <li id="yplay"><thead id="yplay"></thead></li>
  • hash_equals

    (PHP 5 >= 5.6.0, PHP 7, PHP 8)

    hash_equals可防止時序攻擊的字符串比較

    說明

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

    比較兩個字符串,無論它們是否相等,本函數(shù)的時間消耗是恒定的。

    本函數(shù)可以用在需要防止時序攻擊的字符串比較場景中, 例如,可以用在比較 crypt() 密碼哈希值的場景。

    參數(shù)

    known_string

    已知長度的、要參與比較的 string

    user_string

    用戶提供的字符串

    返回值

    當(dāng)兩個字符串相等時返回 true,否則返回 false。

    錯誤/異常

    如果所提供的 2 個參數(shù)中任何一個不是字符串, 會導(dǎo)致 E_WARNING 消息。

    范例

    示例 #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)
    

    注釋

    注意:

    要想成功進(jìn)行比較,那么所提供的 2 個參數(shù)必須是相同長度的字符串。 如果所提供的字符串長度不同,那么本函數(shù)會立即返回 false, 在時序攻擊的場景下,已知字符串的長度可能會被泄露。

    注意:

    非常重要的一點(diǎn)是,用戶提供的字符串必須是第二個參數(shù)。