Web開発では、ファイルの転送とストレージのセキュリティは常に無視できない問題でした。ファイルの整合性を確保し、転送中にファイルが改ざんされないようにするために、ファイルの署名検証は一般的で効果的な慣行です。 hash_update_stream()関数は、ファイルの署名検証を処理するためのPHPの重要なツールの1つです。この記事では、hash_update_stream()関数を使用してファイル署名検証を実装し、ファイルの整合性とセキュリティを確保する方法を紹介します。
ファイル署名検証は、ハッシュアルゴリズムを使用してファイルのコンテンツにデジタル署名を生成し、その署名を介してファイルの整合性を確認する方法です。一般的なハッシュアルゴリズムには、MD5、SHA-1、SHA-256などが含まれます。これらは、一意のファイル指紋を生成することにより、送信中のファイルの整合性を検証するのに役立ちます。
ネットワーク上でファイルが転送されると、ファイルの改ざんやデータの損失などのさまざまな脅威に遭遇する可能性があります。これらの問題を防ぐために、ファイルの署名検証は、ファイルが改ざんされておらず、そのコンテンツが完了していることを確認するのに役立ちます。
PHPのhash_update_stream()関数は、ハッシュ値を更新するために使用されます。これは、ファイルコンテンツ全体を一度にメモリにロードする必要なく、ハッシュ値を段階的に更新できるため、大きなファイルを処理するのに非常に効果的です。この関数は通常、 hash_init()およびhash_final()関数で使用され、ファイルの署名生成と検証プロセスを完了します。
hash_update_stream()の基本的な構文は次のとおりです。
bool hash_update_stream ( resource $context , resource $handle [, int $length = 1024 ] )
$コンテキスト:これは、hash_init()関数によって作成されたハッシュコンテキストです。
$ハンドル: Fopen()関数を介して取得できるファイルのファイルハンドル。
$ length :ハッシュが更新されるたびに読み取られるバイト数は、デフォルトで1024バイトになります。
まず、ハッシュアルゴリズムを選択し、ハッシュコンテキストを初期化する必要があります。この場合、SHA-256アルゴリズムを使用します。
$algorithm = 'sha256';
$context = hash_init($algorithm);
次に、 Fopen()関数を介してファイルを開き、 Hash_update_stream()関数を使用してファイルコンテンツを徐々に読み取り、ハッシュ値を更新します。このプロセスは、あまりにも多くのメモリを取り上げることなく、大きなファイルを処理できます。
$file = fopen('file.txt', 'rb');
if ($file === false) {
die('ファイルを開くことができません');
}
while (!feof($file)) {
hash_update_stream($context, $file);
}
fclose($file);
ファイルの内容がすべて読み取られ、ハッシュコンテキストに更新されると、 hash_final()関数を介して最終的なハッシュ値を取得できます。
$fileHash = hash_final($context);
echo "ファイルのハッシュ値はです: " . $fileHash;
ファイルの整合性を確認するには、ファイルのハッシュ値を以前に保存した正しいハッシュ値と比較する必要があります。 2つの一致した場合、ファイルは改ざんされていません。
$expectedHash = '事前に保存されたハッシュ値';
if ($fileHash === $expectedHash) {
echo "ファイルが完了します,改ざんされていません";
} else {
echo "ファイルは改ざんされています";
}
<?php
// ハッシュアルゴリズムを選択します
$algorithm = 'sha256';
// ハッシュコンテキストを初期化します
$context = hash_init($algorithm);
// ファイルを開きます
$file = fopen('file.txt', 'rb');
if ($file === false) {
die('ファイルを開くことができません');
}
// ハッシュ値を徐々に更新します
while (!feof($file)) {
hash_update_stream($context, $file);
}
fclose($file);
// ファイルのハッシュ値を取得します
$fileHash = hash_final($context);
echo "ファイルのハッシュ値はです: " . $fileHash . "\n";
// 验证ファイルが完了します性
$expectedHash = '事前に保存されたハッシュ値';
if ($fileHash === $expectedHash) {
echo "ファイルが完了します,改ざんされていません";
} else {
echo "ファイルは改ざんされています";
}
?>
高いメモリ効率: hash_update_stream()関数は、ファイルを徐々に読み取り、ハッシュ値を計算できるようになります。これは、大きなファイルの処理に適しており、ファイル全体を一度にロードするメモリ消費を回避します。
複数のハッシュアルゴリズムをサポート:PHPは、複数のハッシュアルゴリズム(SHA-256、SHA-512など)をサポートし、ニーズに応じて適切なアルゴリズムを選択できます。
使いやすい:ファイルの署名検証にhash_update_stream()を使用することは非常に簡単であり、完全性の確認はいくつかのステップでのみ必要です。
実際のアプリケーションでは、ファイルのダウンロードとアップロード操作と組み合わせてファイルの署名検証がよく使用されます。ファイル転送にM66.netのようなWebサイトを使用している場合、ダウンロードされた各ファイルが署名および確認されることを確認することが重要なセキュリティ尺度であることを確認します。たとえば、 M66.NETからダウンロードされたファイルが次のことを改ざんされているかどうかを確認できます。