Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
hash() / md5() / sha1()対応: PHP 5(2004)
文字列やファイルからハッシュ値を生成する関数です。データの整合性チェックやフィンガープリントの生成に使用します。
構文
// 指定したアルゴリズムでハッシュ値を生成します。 hash($algo, $data, $binary); // 文字列のMD5ハッシュを生成します。 md5($string, $binary); // 文字列のSHA-1ハッシュを生成します。 sha1($string, $binary); // 利用可能なハッシュアルゴリズムの一覧を返します。 hash_algos();
関数一覧
| 関数 | 概要 |
|---|---|
| hash($algo, $data, $binary) | 指定したアルゴリズムでハッシュ値を生成します。第3引数を『true』にするとバイナリ形式で返します。デフォルトは16進数文字列です。 |
| md5($string, $binary) | MD5ハッシュを生成します。32文字の16進数文字列を返します。セキュリティ用途では使用しないでください。 |
| sha1($string, $binary) | SHA-1ハッシュを生成します。40文字の16進数文字列を返します。セキュリティ用途では使用しないでください。 |
| hash_algos() | 利用可能なハッシュアルゴリズムの名前を配列で返します。 |
| hash_file($algo, $filename) | ファイルの内容からハッシュ値を生成します。大きなファイルでもメモリに全体を読み込まずに処理します。 |
| hash_hmac($algo, $data, $key) | HMAC方式でハッシュを生成します。秘密鍵を使った改ざん検知に使用します。 |
サンプルコード
<?php
// hash() で SHA-256 ハッシュを生成します。
$data = "Hello, World!";
echo hash('sha256', $data); // 64文字の16進数文字列が出力されます。
// md5() でハッシュを生成します。ファイルのチェックサム確認に限定して使用します。
echo md5("test"); // 『098f6bcd4621d373cade4e832627b4f6』と出力されます。
// sha1() でハッシュを生成します。
echo sha1("test"); // 『a94a8fe5ccb19ba61c4c0873d391e987982fbbd3』と出力されます。
// ファイルのチェックサムを計算します。ダウンロードの整合性確認に使えます。
$checksum = hash_file('sha256', '/path/to/downloaded_file.zip');
echo $checksum;
// HMAC方式で改ざん検知用のハッシュを生成します。
$secret_key = 'my_secret_key';
$message = 'order_id=12345&amount=9800';
$signature = hash_hmac('sha256', $message, $secret_key);
echo $signature; // 秘密鍵がなければ再現できないハッシュが生成されます。
// APIリクエストの署名検証の例です。
$received_signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$payload = file_get_contents('php://input');
$expected = hash_hmac('sha256', $payload, $secret_key);
if (hash_equals($expected, $received_signature)) {
echo "署名が一致しました。リクエストは正当です。";
} else {
echo "署名が不正です。";
}
// 利用可能なアルゴリズムを確認します。
$algos = hash_algos();
echo count($algos) . "種類のアルゴリズムが利用可能です。";
概要
『hash()』はPHPで汎用的なハッシュ値を生成するための関数です。SHA-256やSHA-512など、多数のアルゴリズムに対応しています。用途に応じて適切なアルゴリズムを選択してください。
重要: 『md5()』と『sha1()』はセキュリティ用途では使用しないでください。MD5は2004年に衝突攻撃が実証され、SHA-1も2017年にGoogleが衝突を実現しています。パスワードのハッシュ化には『password_hash()』を、データの整合性チェックにはSHA-256以上を使用してください。『md5()』や『sha1()』の利用が許容されるのは、セキュリティとは無関係なファイルのチェックサム確認やキャッシュキーの生成など、限定的な場面のみです。
『hash_hmac()』は秘密鍵を組み合わせたHMAC方式のハッシュを生成します。APIの署名検証やWebhookの改ざん検知に使用します。ハッシュの比較には、タイミング攻撃を防ぐために hash_equals() を必ず使用してください。パスワード保護については『password_hash()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。