ファイルデータの整合性検証とは、通常、ファイルが送信またはストレージ中に改ざんされているか、破損しているかを確認することを指します。ファイルの整合性を確保するために、ハッシュアルゴリズムが通常使用されます。ハッシュアルゴリズムは、ファイルの内容を「ハッシュ」または「概要」と呼ばれる固定長文字列に変換します。ファイルコンテンツが変更された場合、対応するハッシュ値も変更されます。
PHPでは、 hash_final関数を使用して、ハッシュコンテキストの最終結果を返します。この関数は通常、 hash_initおよびhash_updateと組み合わせて使用して、ファイルまたは文字列データのハッシュ計算を処理します。基本的な構文は次のとおりです。
string hash_final ( resource $context [, bool $raw_output = false ] )
$コンテキストは、 hash_initによって返されるハッシュコンテキストリソースです。
$ raw_outputはオプションのパラメーターであり、デフォルトでfalseになります。つまり、ハッシュ値は16進形式で返されます。 trueに設定すると、元のバイナリハッシュ値が返されます。
file_put_contentsは、データをファイルに書き込むファイル操作機能です。その基本的な構文は次のとおりです。
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
$ filenameは、書かれたファイル名です。
$データは、記述すべきデータです。
$ flagsは、ファイルを上書きするかデータを上書きするかなど、執筆中の動作を示すオプションのパラメーターです。
$コンテキストは、ファイル操作のコンテキストを表すオプションのパラメーターです。
hash_finalとfile_put_contents関数を組み合わせて、単純なファイルの整合性検証メカニズムを実装できます。実装プロセスの詳細な手順は次のとおりです。
ハッシュ計算の初期化:最初に、 HASH_INIT関数を使用してハッシュコンテキストを初期化し、使用するハッシュアルゴリズムを指定します(たとえば、 SHA256 )。
ファイルのコンテンツを読み取り、ハッシュを更新します: HASH_UPDATE関数を使用してファイルの内容を読み取り、読み取るたびにハッシュ値を更新します。
ファイルに書き込む: file_put_contents関数を介して指定されたファイルにファイルの内容を書き込む。
ファイルのハッシュ値を生成します。最後に、最終的なハッシュ値はhash_final関数を介して取得され、ファイルの一部として保存されるか、データベースに保存されます。
hash_finalおよびfile_put_contents関数を使用してファイルデータの整合性検証を実装するためのサンプルコードを次に示します。
<?php
// ファイルパス
$filePath = 'path/to/your/file.txt';
// ハッシュコンテキストを初期化します
$context = hash_init('sha256');
// ファイルのコンテンツを読み取り、ハッシュ値を更新します
$fileContent = file_get_contents($filePath);
hash_update($context, $fileContent);
// 最終的なハッシュ値を取得します
$hashValue = hash_final($context);
// ターゲットファイルにファイルの内容を書き込みます
$targetFilePath = 'path/to/your/destination/file.txt';
file_put_contents($targetFilePath, $fileContent);
// ハッシュ値をファイルまたはデータベースに保存します(その後の検証用)
$hashFilePath = 'path/to/your/file_hash.txt';
file_put_contents($hashFilePath, $hashValue);
// 出力ハッシュ値
echo "ファイルのハッシュ値はです: " . $hashValue;
?>
ファイルコンテンツと対応するハッシュ値が保存されたら、次の手順を使用してファイルの整合性を確認できます。
ファイルコンテンツの読み取り:最初に、ターゲットファイルのコンテンツを読み取ります。
ファイルのハッシュ値を計算します。次に、同じハッシュアルゴリズムを使用して、ファイルのハッシュ値を計算します。
ハッシュを比較してください。最後に、計算されたハッシュ値を保存されたハッシュ値と比較します。 2つが一貫している場合、ファイルが改ざんされていないことを意味します。一貫性がない場合、ファイルのコンテンツが変更されたことを意味します。
ファイルの整合性を確認するためのコード例を次に示します。
<?php
// 保存されたハッシュ値をお読みください
$storedHash = file_get_contents('path/to/your/file_hash.txt');
// ターゲットファイルのコンテンツをお読みください
$fileContent = file_get_contents('path/to/your/destination/file.txt');
// ハッシュコンテキストを初期化します并计算文件哈希值
$context = hash_init('sha256');
hash_update($context, $fileContent);
$calculatedHash = hash_final($context);
// ハッシュ値を比較します
if ($storedHash === $calculatedHash) {
echo "ファイルの整合性検証が合格しました,ファイルは改ざんされていません。";
} else {
echo "ファイルの整合性の確認に失敗しました,ファイルが改ざんされている可能性があります。";
}
?>
PHPのhash_finalとfile_put_contents関数を組み合わせることにより、単純なファイルデータの整合性検証メカニズムを実装できます。実際の開発では、この方法を使用して、ストレージまたは送信中のファイルのデータが改ざんされていないことを確認できます。セキュリティを改善するには、 SHA256やSHA512などのセキュリティが高いハッシュアルゴリズムを選択し、他のセキュリティ対策を組み合わせてファイルデータの整合性を保護することをお勧めします。