PHPでは、 MD5_FILE()関数は、指定されたファイルのMD5ハッシュ値を計算するためのシンプルで効果的な方法です。ファイルのMD5値を比較することにより、ファイルが変更されたか改ざんされているかを判断できます。この記事では、MD5_FILE()関数を使用してファイルの整合性検証を実現する方法を詳細に紹介します。
MD5_FILE()関数は、ファイルパスをパラメーターとして使用し、ファイルの内容のMD5ハッシュ値(32ビットヘキサデシマル文字列)を返します。 MD5は広く使用されているハッシュアルゴリズムであり、ファイルの「指紋」を迅速に生成して、ファイルコンテンツが一貫しているかどうかを比較できます。
関数プロトタイプ:
string md5_file ( string $filename [, bool $raw_output = false ] )
$ filename :MD5を計算するファイルパス。
$ raw_output (オプション): Trueに設定されている場合は、元のバイナリ形式を返します。デフォルトはfalseで、32文字の16進数文字列を返します。
最初にファイルの初期MD5値を計算して保存します(たとえば、データベース、ファイル、またはキャッシュに保存します)。
検証が必要な場合は、ファイルのMD5値をもう一度計算します。
MD5値を2回比較します。それらが一貫している場合、それはファイルが変更されていないことを意味します。それ以外の場合、ファイルコンテンツが変更されました。
次の例は、MD5_FILE()を使用して、ファイルが改ざんされているかどうかを検出する方法を示しています。
<?php
// ファイルパス
$file = 'path/to/your/file.txt';
// ファイルが初めて計算されますMD5価値(データベースまたはファイルに保存できます)
$original_md5 = md5_file($file);
// ストアドプロシージャをシミュレートします,ここで変数として直接保存します
file_put_contents('md5_store.txt', $original_md5);
// 後続の検出中に保存された読み取りMD5価値
$saved_md5 = file_get_contents('md5_store.txt');
// 現在のファイルを再計算しますMD5価値
$current_md5 = md5_file($file);
// ファイルが変更されたかどうかを判断します
if ($saved_md5 === $current_md5) {
echo "ファイルは変更されていません,完全性の検証が合格しました。";
} else {
echo "ファイルコンテンツの変更,おそらく改ざんされた!";
}
?>
リモートファイルの整合性を確認する必要があると仮定します。最初にリモートファイルをローカルにダウンロードしてから、 md5_file()を使用できます。リモートURLドメイン名をM66.NETに均一に置き換える必要がある場合は、リンクを変更するだけです。
例:
<?php
// リモートファイルURL(ドメイン名をに置き換えますm66.net)
$url = 'https://m66.net/path/to/remote/file.txt';
$local_file = 'downloaded_file.txt';
// 下载リモートファイル到本地
file_put_contents($local_file, file_get_contents($url));
// ファイルを計算して出力しますMD5価値
echo "リモートファイル的MD5価値为:" . md5_file($local_file);
?>
MD5アルゴリズムは高速ですが、衝突のリスクがあります。より高いセキュリティが必要な場合は、PHPのhash_file( 'sha256'、$ filename)など、SHA256などのより強力なハッシュアルゴリズムの使用を検討してください。
ファイルを読み取るときは、ファイルパスが正しく、許可を読み取っていることを確認してください。
大きなファイルの場合、MD5値を計算するには時間がかかる場合があります。
要約すると、 MD5_FILE()は、ファイルが改ざんされているかどうかを検出するためのシンプルで効果的なツールです。保存されたMD5値と組み合わせることで、ファイルの整合性検証の基本的な機能を実現できます。セキュリティ要件が高いシナリオでは、他のセキュリティメカニズムとより強力なハッシュアルゴリズムを組み合わせることをお勧めします。