PHPでは、 hash_update_stream()関数は、データストリーム(ファイルなど)のハッシュ値を段階的に計算するための非常に便利なツールです。この関数は通常、ファイルの整合性を検証し、送信中またはストレージ中にファイルが改ざんされていないことを確認するために使用されます。この記事では、hash_update_stream()関数を使用してファイルの整合性を検証する方法を紹介します。
hash_update_stream()は、ハッシュコンテキストの値を更新するためにPHPによって提供される関数です。その目的は、特定のデータストリーム(通常はファイル)を処理することにより、ファイルのハッシュ値を徐々に計算することです。
構文は次のとおりです。
bool hash_update_stream ( resource $context , resource $file_handle [, int $length = 8192 ] )
$コンテキスト:ハッシュコンテキストリソース、通常はhash_init()関数によって作成されます。
$ file_handle :すでに開いているファイルハンドル(たとえば、 fopen()を介して開かれたファイル)。
$ length :バイト数は、ストリームを読むときに読み取られるたびに、デフォルトは8192バイトです。
ファイルの整合性検証は、ストレージまたは転送中にファイルが変更または破損していないことを確認する重要な方法です。多くのアプリケーションシナリオでは、セキュリティとデータの一貫性にとってファイルの整合性を確保することが重要です。
たとえば、サーバーからダウンロードされたファイルが転送中に改ざんされていることを確認するか、ローカルに保存されているファイルが破損していないことを確認することをお勧めします。この時点で、ファイルのハッシュ値を比較することにより、ファイルが同じままであるかどうかを確認できます。
hash_update_stream()を使用して、ファイルを段階的に読み取り、ハッシュ値を計算できます。このアプローチを使用すると、ファイルコンテンツのすべての部分が処理され、ファイルの完全なハッシュを取得することができます。転送またはストレージ中にいつでもファイルが変更された場合、ハッシュ値は変更され、ファイルの整合性を検出するために使用できます。
Hash_update_stream()関数を使用してファイルの整合性を検証する方法を示す簡単な例を示します。
<?php
// ハッシュコンテキストを作成します
$context = hash_init('sha256');
// ファイルを開きます
$file_path = 'path/to/your/file.txt';
$file = fopen($file_path, 'rb');
if (!$file) {
die('无法ファイルを開きます');
}
// 使用 hash_update_stream() ファイルのハッシュ値を徐々に計算します
while (!feof($file)) {
// それぞれ読みます 8192 バイトしてハッシュ値を更新します
hash_update_stream($context, $file, 8192);
}
// ファイルの最終的なハッシュ値を取得します
$hash = hash_final($context);
// 出力ファイルのハッシュ値
echo "ファイルのハッシュ値はです: " . $hash . "\n";
// ファイルを閉じます
fclose($file);
// ファイルの正しいハッシュを以前に保管したことがあると仮定します
$correct_hash = '事前に保存された正しいハッシュ値';
// ファイルの整合性を確認します
if ($hash === $correct_hash) {
echo "ファイルの整合性検証が合格しました!\n";
} else {
echo "ファイルの整合性の確認に失敗しました!\n";
}
?>
この例では、最初にhash_init()関数を使用してハッシュコンテキストを作成します。次に、ファイルを開き、 hash_update_stream()関数を使用して、ファイルのハッシュ値を徐々に計算します。ファイルを読んだ後、 hash_final()を使用してファイルの最終的なハッシュ値を取得し、ファイルの整合性を確認するために以前に保存された正しいハッシュ値と比較します。
hash_update_stream()関数は、ハッシュ計算のためにファイルを段階的に読み取ることです。これは、ファイル全体を一度にメモリにロードしないため、大きなファイルを処理するのに非常に役立ちます。
読み取りのときにファイルが正しいアクセス権を持っていることを確認してください。そうしないと、ファイルが開いたり、読み取られたりしないようにする可能性があります。
hash_update_stream()は、ファイルストリーム、データストリーム、その他の種類のストリームに適しており、ストリーミングデータのハッシュ計算に非常に便利に使用できます。
hash_init() :ハッシュコンテキストを初期化し、ハッシュアルゴリズム(たとえば、 SHA256 )を指定します。
hash_update() :ハッシュコンテキストの更新に使用される値。
hash_final() :最終的なハッシュ値を取得します。
hash_update_stream()関数を使用してファイルの整合性を検証することは非常に効果的な手法です。ファイルを徐々に読み取り、ハッシュ値を計算することにより、送信およびストレージ中にファイルが改ざんまたは破損していないことを確認できます。実際のアプリケーションでは、この方法をファイルのダウンロード、アップロード検証、ファイルの整合性チェックなどの複数のシナリオに適用できます。