PHPでは、hash関数「hash()」を利用することでハッシュ値を生成することができる。
よく使用するので、代表的なモノをいくつかメモ。

ハッシュ値とは

そもそもハッシュ値とは?

ハッシュ値とは、元になるデータから一定の計算手順により求められた固定長の値。その性質から暗号や認証、データ構造などに応用されている。ハッシュ値を求めるための計算手順のことをハッシュ関数、要約関数、メッセージダイジェスト関数などという。

ハッシュ値とは – IT用語辞典

らしい。

データの取引や保存をする際に、セキュリティ対策などで使用しています。

ハッシュ関数とは

代表的なハッシュ関数には以下のような種類がある。ほかにもたくさん。

  • 名称
  • 説明
  • MD5
  • Message Digest 5の略で128ビット(16進数では32桁)のハッシュ値を生成するハッシュ関数。
    MD5は脆弱性が見つかっている古いハッシュ関数のため、セキュリティ用途での使用は推奨されていない。
  • SHA-1
  • ecure Hash Algorithm 1の略で160ビット(16進数では40桁)のハッシュ値を生成するハッシュ関数。
    SHA-1は脆弱性が見つかっている古いハッシュ関数のため、セキュリティ用途での使用は推奨されていない。
  • SHA-2
  • Secure Hash Algorithm 2の略で、前規格であるSHA-1から多くの改良が加えられたバージョン。
    SHA-2は、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256の6つのバリエーションを持ち、最長のSHA-512が最も安全性が高く、一般的にはSHA-256がよく利用されている。
  • SHA-3
  • Secure Hash Algorithm 3の略で、2015年8月5日に正式版が公表された最新のハッシュ関数。
    SHA-3の関数は固定長を出力する224、256、384、512と 可変長出力のSHAKE128 およびSHAKE256が存在している。

hash関数

コード

echo 'MD5:' .hash('md5', 'テスト', false) .'<br>';
echo 'SHA-1:' .hash('sha1', 'テスト', false) .'<br>';
echo 'SHA-256:' .hash('sha256', 'テスト', false) .'<br>';
echo 'SHA-512:' .hash('sha512', 'テスト', false) .'<br>';
echo 'SHA3-256:' .hash('sha3-256', 'テスト', false) .'<br>';
echo 'SHA3-512:' .hash('sha3-512', 'テスト', false) .'<br>';

実行結果

MD5:b0f1c5a480f416234a803b35d9932c57
SHA-1:63b560db8849e08797624b58335240e0d06282bd
SHA-256:8a535a3f4dcd2c396db11b7c1e54221d04375c9f9be96bce47dc2fdb237e86c9
SHA-512:0b5d8c7fb5b942cb09b0390db6fd09ff77aa56270aae66ee139b890b163116610c915f1246c7204237e3224360a01ec1ad633918da919cbe2b24d5ba8c5b3ddc
SHA3-256:9875111d8f5c349b868f1be1248dd1a7e26e2a63ee6f3a84c26151c5b1e2ebfa
SHA3-512:43032a59a0db8e372cdfa0b1061919ae3072555866bb639b6a0e533258e86a505bb36c0f5282a293dec299b7144c0b5f986078435027242849f14e086414880

注意

単純なハッシュ化だけでは脆弱性の問題などがあるため、ソルト(ランダムなデータ)を組み合わせるなど対策が必要。

$password = "password";
$salt = random_bytes(16); // ランダムなバイト列を生成
$hash = hash("sha256", $salt . $password);

hash_hmac関数

hash_hmac関数では、HMAC方式によるハッシュ値を生成することができ、第三引数に秘密鍵を指定する。

HMAC とは、メッセージ認証符号 の一つであり、秘密鍵とメッセージとハッシュ関数をもとに計算される。

HMAC – Wikipedia

コード

echo 'MD5:' .hash_hmac('md5', 'テスト', '秘密鍵', false) .'<br>';
echo 'SHA-1:' .hash_hmac('sha1', 'テスト', '秘密鍵', false) .'<br>';
echo 'SHA-256:' .hash_hmac('sha256', 'テスト', '秘密鍵', false) .'<br>';
echo 'SHA-512:' .hash_hmac('sha512', 'テスト', '秘密鍵', false) .'<br>';
echo 'SHA3-256:' .hash_hmac('sha3-256', 'テスト', '秘密鍵', false) .'<br>';
echo 'SHA3-512:' .hash_hmac('sha3-512', 'テスト', '秘密鍵', false) .'<br>';

実行結果

MD5:7609bc6ea15df624b4fcba2471e050bf
SHA-1:d126da6789f314c6e22c7e973c7a7aa784289018
SHA-256:a1efa16c1cb7c6bafa855d7e0db24a320f44ac8dcbefbfb716e08252d004515d
SHA-512:c4004dab67fc2391a9c811e1af71a2dbc3dd43e2e5431399c9dfda47e144b17bd04b92a1a75fcb46c00ed50d99f0dc5bd3d9d9770475fe2fee4bc5fce1975f4d
SHA3-256:b3290530111d3bcc4e5a8552537403ffa2c06da48c4ea81587332c15829d780f
SHA3-512:87d406b3afd50b299b4fcf3b49c2bf40beba0649cf8650673e5fa10465fc381ddadec72426ab5127738a53df8b2e194e28fec5fb9325844b03bbf3ea5181fb84

追記

HASHGENERATOR ( ハッシュ値生成ツール ) を作成しました。
等サイト内に設置しておりますので、上記リンクよりお気軽にご利用ください。

参考

PHP: Hash 関数 – Manual

PHP: hash – Manual

PHP: hash_hmac – Manual