PHPでファイルのMD5ハッシュ値を取得する方法を徹底解説!md5_file関数の使い方


使い方

$md5_hash = md5_file('ファイルパス');

上記のように、md5_file 関数にファイルへのパスを渡すだけで、そのファイルのMD5ハッシュ値を取得できます。取得結果は、32文字の英数字列として変数 $md5_hash に格納されます。

オプション

md5_file 関数は、オプション引数を使用して、ハッシュ値の出力形式をバイナリ形式に変更することができます。

$md5_hash = md5_file('ファイルパス', true);

true を渡すことで、ハッシュ値は16バイトのバイナリデータとして取得できます。

$file_path = 'example.txt';

if (file_exists($file_path)) {
    $md5_hash = md5_file($file_path);
    echo "ファイル {$file_path} のMD5ハッシュ値: {$md5_hash}\n";
} else {
    echo "ファイル {$file_path} が見つかりません。\n";
}

この例では、example.txt ファイルのMD5ハッシュ値を取得し、コンソールに出力します。

  • MD5ハッシュ値は、衝突の可能性が非常に低いため、ファイルの改ざん検知に有効な手段ですが、完全なセキュリティ対策とは言えません。より高度なセキュリティ対策が必要な場合は、HMACなどの他のハッシュ関数を使用することを検討してください。
  • md5_file 関数は、ファイルが存在し、読み取り可能であることを前提としています。ファイルが存在しない場合や、読み取り権限がない場合は、エラーが発生します。


<?php

// 保存済みのMD5ハッシュ値
$stored_hash = '1234567890abcdef1234567890abcdef';

// ファイルのパス
$file_path = 'example.txt';

// ファイルが存在し、読み取り可能であることを確認
if (file_exists($file_path) && is_readable($file_path)) {
    // ファイルのMD5ハッシュ値を取得
    $current_hash = md5_file($file_path);

    // 保存済みのハッシュ値と比較
    if ($stored_hash === $current_hash) {
        echo "ファイル {$file_path} は改ざんされていません。\n";
    } else {
        echo "ファイル {$file_path} は改ざんされている可能性があります。\n";
    }
} else {
    echo "ファイル {$file_path} が見つかりません。\n";
}
  1. 保存済みのMD5ハッシュ値を $stored_hash 変数に設定します。これは、ファイルの初期ハッシュ値または、信頼できるソースから取得したハッシュ値である必要があります。
  2. ファイルのパスを $file_path 変数に設定します。
  3. コードを実行して、ファイルの改ざんチェック結果を確認します。
  • ファイルのハッシュ値を保存する際には、安全な方法で保存する必要があります。


hash_file() 関数

hash_file() 関数は、PHP 7.1 以降で使用できる新しい関数で、md5_file 関数よりも高速で、より多くのハッシュアルゴリズムをサポートしています。

$hash = hash_file('sha256', 'example.txt');
echo "SHA256 ハッシュ: {$hash}\n";

OpenSSL ハッシュライブラリ

OpenSSL ハッシュライブラリは、PHP に組み込まれており、MD5 以外にも様々なハッシュアルゴリズムをサポートしています。

$hash = openssl_digest(file_get_contents('example.txt'), 'sha256');
echo "SHA256 ハッシュ: {$hash}\n";

ハッシュ化クラス

Composer を使用してインストールできるハッシュ化ライブラリもあります。これらのライブラリは、より柔軟なインターフェースと、追加機能を提供することがあります。

例:

どの代替方法を選択すべきですか?

最適な代替方法は、ニーズによって異なります。

  • すでに Composer を使用している場合は、Composer で利用可能なハッシュ化ライブラリを検討することができます。
  • 複雑なハッシュ化要件がある場合は、OpenSSL ハッシュライブラリまたはハッシュ化ライブラリの方が適している場合があります。
  • 高速性と汎用性を求める場合は、hash_file() 関数がおすすめです。
  • ハッシュ値は、安全な方法で保存する必要があります。
  • どのハッシュアルゴリズムを使用するか選択する際には、セキュリティ要件を考慮する必要があります。MD5 は古く脆弱なハッシュアルゴリズムであるため、SHA256 などのより強力なハッシュアルゴリズムを使用することをお勧めします。