PHP

PHPでハッシュ値(SHA1/SHA2/SHA3/MD5)を生成する

PHPでハッシュ値(SHA1/SHA2/SHA3/MD5)を生成する方法

スポンサーリンク

ハッシュ関数とは

代表的なハッシュ関数には次のような種類があります。

名称説明
MD5Message Digest 5の略で128ビット(16進数では32桁)のハッシュ値を生成するハッシュ関数。MD5は脆弱性が見つかっている古いハッシュ関数のため、セキュリティ用途での使用は推奨されていない。
SHA-1ecure Hash Algorithm 1の略で160ビット(16進数では40桁)のハッシュ値を生成するハッシュ関数。SHA-1は脆弱性が見つかっている古いハッシュ関数のため、セキュリティ用途での使用は推奨されていない。
SHA-2Secure 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-3Secure Hash Algorithm 3の略で、2015年8月5日に正式版が公表された最新のハッシュ関数。SHA-3の関数は固定長を出力する224、256、384、512と 可変長出力のSHAKE128 およびSHAKE256が存在している。

hash関数

PHPでは、hash関数を利用することでハッシュ値を生成することができます。

hash関数の引数と実装例は次の通りです。

  • 第一引数:使用するハッシュ関数の名称("md5"、"sha256"など)、 サポートされているハッシュ関数はPHPのバージョンにより異なるので、詳しくはhash_algos() を参照。
  • 第二引数:ハッシュ値へと変換する値。
  • 第三引数:TRUE に設定するとバイナリデータを出力。 FALSE の場合は小文字の 16 進数で値を出力。(省略可でデフォルトはFALSE)

hash関数の実装例

【実装例】

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

【実行結果】

MD5:afbef4a1737bed2e6e080a03b4b04cb4
SHA-1:39bc6e92abd2f88886fa17ea3e78005fcf7e504f
SHA-256:a67c188a9382e4f44f16c686335832d1d0253dd0b44ac0e4aed4dcf53c285b13
SHA-512:5741dc133671babcd79ba9ac6f42e6e423c896af7f0ebc393d0075aa95da1264efe25344b62023368aa968db45ed6cd5aa20a8f67252870d9e37db2515bf5427
SHA3-256:59d6808fe288df1d428cc1b61c55d79e43d9ad4f26a3a23e0772f7243efc99e4
SHA3-512:6596b23258d166b0dcd83a77788b83bf2fd3a82b2a1303072865c4eb24d8103402ff720f4b8c9046b686542cbe851bc470e355a40fec72118515e981bdd6f930

hash_hmac関数

hash_hmac関数を利用することで、HMAC 方式によるハッシュ値を生成することができます。

hash_hmac関数の引数と実装例は次の通りです。

  • 第一引数:使用するハッシュ関数の名称("md5"、"sha256"など)、 サポートされているハッシュ関数はPHPのバージョンにより異なるので、詳しくはhash_algos() を参照。
  • 第二引数:ハッシュ値へと変換する値。
  • 第三引数:HMAC 方式でのメッセージダイジェストを生成するために使用する 共有の秘密鍵。
  • 第四引数:TRUE に設定するとバイナリデータを出力。 FALSE の場合は小文字の 16 進数で値を出力。(省略可でデフォルトはFALSE)

hash_hmac関数の実装例

【実装例】

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

【実行結果】

MD5:72bcc6e259c560b5a8a4dde25b922258
SHA-1:8594be6ed760596c78f8fd352c55194f91ab2b3d
SHA-256:9485428ebd5055c21bd0b3225c63774dcf11ba4898af18b935a3e3792a8ea401
SHA-512:2f28aecfaee4849ac5fd39de19e95f6685e8589939ecce027bc9570d76c8c6f638a712c05478b2833c3df95fcb3042d7320fc5aaf8b8debdb4ef5374dc2642bb
SHA3-256:5665c9920d5af7252d3e207a5b27ac8fdf1abe86f9710609143f21a3c0c75993
SHA3-512:98401e7cd8870e8ecc52b7d02c30ac5db8db148f0981f1fb3061a6cc5b7342e4fd6e83d1c8c45304cb8b118841cf32ed83ac45b528b3fc4ea556f6bc72fbaf16

helpful