現在の位置: ホーム> 最新記事一覧> md5_file()を使用して画像ファイルを検証する際のベストプラクティス

md5_file()を使用して画像ファイルを検証する際のベストプラクティス

M66 2025-06-02

PHPでは、 MD5_FILE()関数は、ファイルのMD5ハッシュ値を計算するための非常に実用的なツールです。ファイルのハッシュ値を比較することにより、画像ファイルが改ざんされているかどうかを効果的に検出できます。この記事では、画像ファイルの整合性を確保するために、MD5_FILE()関数を使用する方法を詳細に紹介します。

md5_file()とは何ですか?

MD5_FILE()関数は、指定されたファイルのMD5ハッシュ値を計算し、32ビット16進文字列を返します。 MD5は、ファイル検証によく使用される一般的なハッシュアルゴリズムです。ファイルがわずかに変更したとしても、MD5値は大幅に異なります。

関数プロトタイプ:

 string md5_file(string $filename, bool $raw_output = false)
  • $ filename :ハッシュ値を計算する必要があるファイルパス。

  • $ raw_outputtrueの場合、元のバイナリ形式を返します。デフォルトのfalseは、160個の文字列を返します。

なぜMD5_FILE()を使用して画像ファイルの整合性を検出しますか?

画像ファイルは、送信およびストレージ中に悪意を持って改ざんしたり、誤って損傷したりする可能性があります。画像ファイルの元のMD5値を保存することにより、その後の使用で再計算して比較できます。 MD5値が一貫性がないと、ファイルが改ざんまたは破損していると判断できます。


例:MD5_FILE()を使用して、画像ファイルの整合性を確認します

アップロードされたときにMD5値をデータベースまたはテキストファイルに保存するImage.jpgがあるとします。次に、この写真を使用して比較するたびにMD5を再計算します。

ステップ1:画像MD5値を計算して保存します

<?php
$imagePath = 'uploads/image.jpg';
$md5Hash = md5_file($imagePath);

echo "画像ファイル MD5 値はです:".$md5Hash;

// 通常、ここにあります $md5Hash データベースまたはファイルに保存します,フォローアップの検証に便利です
?>

ステップ2:画像が改ざんされているかどうかを比較して検出します

<?php
$imagePath = 'uploads/image.jpg';

// データベースまたはファイルから以前に保存された読み取りMD5価値
$originalMd5 = 'd41d8cd98f00b204e9800998ecf8427e';  // 例MD5価値

$currentMd5 = md5_file($imagePath);

if ($currentMd5 === $originalMd5) {
    echo "画像ファイルは改ざんされていません。";
} else {
    echo "警告:画像ファイルが改ざんされている可能性があります!";
}
?>

リモートURLファイルを確認します

画像ファイルがリモートサーバーに存在する場合があり、ファイルコンテンツを最初にダウンロードしてからMD5を計算できる場合があります。

 <?php
$url = 'https://m66.net/path/to/image.jpg';
$tempFile = 'temp_image.jpg';

// リモートファイルをローカルの一時ファイルにダウンロードします
file_put_contents($tempFile, file_get_contents($url));

// ダウンロードされたファイルを計算しますMD5価値
$remoteMd5 = md5_file($tempFile);

echo "远程画像ファイル MD5 価値:".$remoteMd5;

// 一時ファイルを削除します
unlink($tempFile);
?>

まとめ

  • MD5_FILE()を使用して、ファイルのMD5ハッシュ値を計算します。これにより、ファイルが改ざんされているかどうかの検出が容易になります。

  • 元のファイルのMD5値を保存し、後でそれを比較して、ファイルが完了していることを確認します。

  • ローカルファイルに適用することも、最初にリモートファイルをダウンロードしてから計算することもできます。

  • この方法は、ファイルが変更されていることを検出するのに適していますが、改ざんを防ぐことはできず、整合性検証の手段としてのみ使用できます。