[php: hash] Generate hash on PHP. #php #security
hash() で生成する HASH アルゴリズムの特徴について。
echo md5(uniqid(mt_rand(), true)).PHP_EOL;
// e0d0e5b3e962afdc6c6f6488c17c537b
echo sha1(uniqid(mt_rand(), true)).PHP_EOL;
// 260de8f45b0e471714f71531ddf7b121e3968fd1
echo hash('sha256', uniqid(mt_rand())).PHP_EOL;
// 2bd0ee8b10042b56018e734548e1b508bff197d0e22a068ede55af252bebf7c5
アルゴリズムを変えたところで ハッシュは総当たりでクラックされる可能性がある 。どのアルゴリズムも 平文パスワードを純粋にハッシュするだけでは脆弱 なので、元のデータにデータを追加する「ソルト」付けや、このソルト生成にハッシュを組み合わせる「ソルトアンドペッパー」を行うのが定石とされる。(まぁほとんどフレームワーク側で担保してるけどね)
$password = 'this1sPassW0rd';
$salt = 'SecuritySalt';
$pepper = hash('SHA256', 'AndPepper');
$hashedPw = hash('SHA256', $pepper.$password.$salt);