Php/docs/function.hash-equals

提供:Dev Guides
< Php
移動先:案内検索

hash_equals

(PHP 5 >= 5.6.0, PHP 7)

hash_equalsタイミング攻撃に対して安全な文字列比較


説明

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

2つの文字列が等しいかどうか、同じ長さの時間で比較します。

この関数は、タイミング攻撃を緩和するために使われるべきです。 たとえば crypt() によるパスワードのハッシュを検証する場合などです。


パラメータ

known_string
比較対象とする既知の長さの文字列
user_string
ユーザー指定の文字列


返り値

2つの文字列が等しい場合は true を返し、そうでない場合は false を返します。


エラー / 例外

指定されたパラメータのいずれかが文字列でない場合、 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)

注意

注意:

正しく比較するには、両方の引数が同じ長さでなければなりません。 異なる長さの引数を与えた場合、 false が直ちに返され、 タイミング攻撃を加えられていると、既知の文字列の長さが漏れる可能性があります。

注意:

ユーザー指定の文字列を、最初ではなく2番目のパラメーターとして指定することが重要です。