《PHP8上級試験対策》hash() はソルトを付与しない!ひっかけ問題に注意

  • URLをコピーしました!

はじめに

PHP8上級試験の問題集には、「hash() 関数はソルトを自動で付与するため毎回異なる出力になる」 というトラップ的な記述があります。しかし実際には、hash() 関数はソルトを付与しません。同じ入力に対しては、常に同じ結果を返します。
この記事では、試験対策として hash()password_hash() の違いを整理します。

キーワード: hash() / password_hash() / ソルト / PHP8上級試験

目次

hash() 関数の仕様

hash(
    string $algo,
    string $data,
    bool $binary = false,
    array $options = []
): string
  • $algo : アルゴリズム(例: "sha256", "md5")
  • $data : 入力データ
  • $binary : 出力形式(デフォルトは16進数文字列)
  • $options : 一部のアルゴリズムで利用可能

👉 重要:ソルトは自動で付与されない。

実行例

<?php
declare(strict_types=1); 
error_reporting(-1);

for($i = 0; $i < 3; ++$i){
    var_dump(hash('sha256', 'aaa'));
}

出力結果(例)

string(64) "9834876d...(固定のハッシュ値)"
string(64) "9834876d...(同じ値)"
string(64) "9834876d...(同じ値)"

同じ入力に対しては、毎回同じハッシュ値が得られます。

password_hash() との違い

password_hash() は毎回ランダムなソルトを自動で付与するため、同じ入力でも出力が異なります。

<?php
echo password_hash('aaa', PASSWORD_DEFAULT) . PHP_EOL;
echo password_hash('aaa', PASSWORD_DEFAULT) . PHP_EOL;

出力結果(例)

$2y$10$yRb5...(毎回異なる)
$2y$10$dKf1...(毎回異なる)

まとめ

  • hash() … ソルトなし。同じ入力なら常に同じ結果。
  • password_hash() … 自動ソルトあり。同じ入力でも毎回違う結果。
  • 試験では 「hash() は毎回違う出力を返す」という記述は誤り に注意!

👉 この記事を読んだ受験者は、「ソルトが絡むのは password_hash() のほう」と瞬時に区別できるようになります。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次