string hash_pbkdf2 (
string $algo,
string $password,
string $salt,
int $iterations,
int $length = 0,
bool $raw_output = false
)
$ algo : SHA256 、 SHA1など、使用するハッシュアルゴリズムを指定します。PHPでサポートされるアルゴリズムでなければなりません。
$パスワード:元のパスワードまたはキー。
$ SALT :同じパスワードが同じハッシュを生成するのを防ぐためのランダムソルト値。
$ iterations :反復数、セキュリティが大きくなるほど、パフォーマンス消費が高くなります。
$ length :出力キーの長さ、デフォルト0は、出力ハッシュアルゴリズムのデフォルトの長さを表します。
$ raw_output :バイナリ形式を出力するかどうか、デフォルトでfalseを出力する16進数文字列を出力します。
hash_pbkdf2('sha999', 'password', 'salt', 1000);
エラーの原因: SHA999は有効なアルゴリズムではなく、呼び出しが失敗するか、警告がスローされます。
解決策: hash_algos()を呼び出して、サポートされているアルゴリズムのリストを取得し、正しいアルゴリズムを選択します。
hash_pbkdf2('sha256', 'password', 'salt', 0);
エラーの原因:反復数は正の整数でなければなりません。0または負の数は無効であり、これは非常に低いセキュリティを引き起こす可能性があります。
解決策:反復回数は少なくとも1000に設定し、特定の値をアプリケーションセキュリティ要件に従って調整する必要があります。
hash_pbkdf2('sha256', 'password', 'salt', 1000, 99999);
エラーの原因:非常に大きな長さの要求は、空の文字列またはパフォーマンスのボトルネックになる場合があります。
解決策:一般的な出力長は、ハッシュアルゴリズムの最大出力長の数倍を超えないようにすることをお勧めします。一般的に、 SHA256の出力長が32バイトの場合、 $の長さを設定するときは妥当でなければなりません。
hash_pbkdf2('sha256', 'password', 'salt', 1000, 64, 'true');
エラーの原因: $ raw_outputはブール値である必要があり、文字列を渡すとタイプの警告が発生するか、予想される出力形式を満たしません。
回避策: TrueまたはFalse Booleanタイプを明示的に渡します。
$algos = hash_algos();
print_r($algos);
パラメーターエラーを回避するために、現在のPHP環境でサポートされているハッシュアルゴリズムを確認してください。
呼び出す前にパラメーターを印刷して、パラメーター値が正しいことを確認します。
$algo = 'sha256';
$password = 'myPassword';
$salt = 'randomSalt';
$iterations = 1000;
$length = 64;
var_dump($algo, $password, $salt, $iterations, $length);
$key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, false);
echo $key;
タイミング関数を介して設定された反復回数の後に費やされた時間を観察し、安全性とパフォーマンスのバランスポイントを見つけます。
$start = microtime(true);
hash_pbkdf2('sha256', 'password', 'salt', 10000);
$end = microtime(true);
echo "時間がかかる:" . ($end - $start) . "2番";
出力結果が予想される長さと形式(16進数またはバイナリ)を満たしているかどうかを確認します。
$algo = 'sha256';
$password = 'user_password';
$salt = 'unique_salt_value';
$iterations = 10000;
$length = 64; // 6416進数文字,等しい32バイト
$raw_output = false;
$derived_key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, $raw_output);
echo "派生キー:" . $derived_key;
ここの塩は、妥当な数の反復があり、アルゴリズムが存在するユニークでランダムでなければならないことに注意してください。
hash_pbkdf2を使用する場合は、ハッシュアルゴリズムが有効であることを確認してください。
安全性とパフォーマンスを確保するために、反復の数を合理的に設定する必要があります。
出力の長さと形式のパラメーターは、期待に沿っている必要があります。
デバッグ中、 hash_algos() 、 var_dump 、およびタイミング関数を使用して、問題のポジショニングを支援できます。
これらを習得すると、安全上の危険やパラメーターエラーによって引き起こされるプログラムの異常を回避できます。