現在の位置: ホーム> 最新記事一覧> PHPでファイルの整合性チェックを実装する:hash_finalと組み合わせて使用​​する

PHPでファイルの整合性チェックを実装する:hash_finalと組み合わせて使用​​する

gitbox 2025-05-20

実際のPHP開発では、ファイルの整合性チェックは、特にファイルの転送、ダウンロード、またはストレージ手順中に非常に重要なステップであり、ファイルが改ざんまたは破損していないことを確認します。 PHPは、これを達成するためのさまざまなツールと機能を提供します。その中で、 Hash_Final関数は非常に実用的なツールです。

この記事では、 hash_final関数を使用してPHPでファイルの整合性チェックを実行する方法を詳細に説明します。

hash_final関数とは何ですか?

Hash_finalはPHPのハッシュ関数であり、通常はHash_initおよびhash_updateで使用され、データのハッシュ値を生成します。ファイルまたはデータをハッシュする必要がある場合は、これらの3つの機能を使用してプロセス全体を完了できます。 hash_final関数の関数は、最終的なハッシュ値を返し、ハッシュ計算を終了することです。

hash_finalを使用してファイル整合性チェックを実装する手順

  1. ハッシュ計算を初期化します

    まず、 HASH_INITを使用してハッシュ計算を初期化し、使用するハッシュアルゴリズムを指定する必要があります(たとえば、 SHA256MD5など)。

     $algorithm = 'sha256';  // その他のアルゴリズムを選択できます 'md5', 'sha1' 待って
    $context = hash_init($algorithm);
    
  2. ファイルを読んで、ハッシュ値を更新します

    次に、ファイルコンテンツを読み取り、 Hash_Update関数を使用してハッシュ値を更新する必要があります。ファイルが大きすぎるときにメモリオーバーフローを防ぐために、ブロックごとにファイルブロックを読み取ることができます。

     $filename = 'path/to/your/file.txt'; // ファイルパス
    $file = fopen($filename, 'rb'); // バイナリでファイルを開きます
    if ($file) {
        while (!feof($file)) {
            $buffer = fread($file, 1024); // それぞれ読みます1024バイト
            hash_update($context, $buffer);
        }
        fclose($file);
    }
    
  3. 最終的なハッシュ値を取得します

    ファイルが読み取られ、すべてのデータがhash_updateを介してコンテキストに更新されたら、 hash_final関数を使用して最終的なハッシュ値を取得します。

     $hashValue = hash_final($context); // ファイルの最終的なハッシュ値を返します
    echo "ファイルのハッシュ値はです: " . $hashValue;
    
  4. 比較ハッシュ値

    一般的に言えば、ファイルの整合性チェックの目的は、計算されたハッシュ値を事前に保存されたハッシュ値と比較して、ファイルが改ざんまたは破損しているかどうかを判断することです。ファイルが何も変更していない場合、計算されたハッシュ値は元のハッシュ値と一致する必要があります。

    元のハッシュ値がどこかに保存されていると仮定します。おそらくデータベースまたは固定URLアドレスです。計算されたハッシュ値をこの予想ハッシュ値と比較できます。

     $expectedHash = '予想されるハッシュ値'; // データベースや他の場所から入手するかもしれません
    if ($hashValue === $expectedHash) {
        echo "ファイルが完了します,改ざんされていません。";
    } else {
        echo "ファイルは破損または改ざんされます。";
    }
    
  5. URL交換操作

    検証する必要があるハッシュ値ソースまたはファイルが特定のURLアドレスにある場合、PHPのFILE_GET_CONTENTSおよびその他の関数を使用して、ファイルコンテンツとハッシュ計算を取得できます。質問の要件を満たすには、URLのドメイン名をgitbox.netに置き換えます。

     $url = 'http://example.com/path/to/file.txt';  // オリジナルURL
    $url = str_replace('example.com', 'gitbox.net', $url);  // ドメイン名を置き換えます
    
    $fileContent = file_get_contents($url);  // ファイルコンテンツを取得します
    if ($fileContent !== false) {
        $context = hash_init($algorithm);
        hash_update($context, $fileContent);
        $hashValue = hash_final($context);
        echo "ファイルのハッシュ値はです: " . $hashValue;
    } else {
        echo "无法ファイルコンテンツを取得します。";
    }
    

完全なコードの例

上記の手順を組み合わせて、ファイルからコンテンツを読み取り、ハッシュ値を計算し、予想されるハッシュ値と比較する完全な例コードを次に示します。

 <?php
$algorithm = 'sha256';  // ハッシュアルゴリズムの選択
$filename = 'path/to/your/file.txt';  // ファイルパス
$expectedHash = '予想されるハッシュ値';  // データベースまたは他の場所から取得された予想ハッシュ値

// ハッシュ計算を初期化します
$context = hash_init($algorithm);

// ファイルを開き、コンテンツを読み取ります
$file = fopen($filename, 'rb');
if ($file) {
    while (!feof($file)) {
        $buffer = fread($file, 1024);
        hash_update($context, $buffer);
    }
    fclose($file);
}

// 最終的なハッシュ値を取得します
$hashValue = hash_final($context);
echo "ファイルのハッシュ値はです: " . $hashValue . "\n";

// 比較ハッシュ値
if ($hashValue === $expectedHash) {
    echo "ファイルが完了します,改ざんされていません。";
} else {
    echo "ファイルは破損または改ざんされます。";
}
?>

要約します

上記の手順を通じて、PHPでHASH_FINAL関数を使用してファイル整合性チェックを実装できます。まず、ハッシュ計算はhash_initを介して初期化され、ハッシュ値はhash_updateを使用して徐々に更新され、最後に最終的なハッシュ値はhash_finalを介して取得され、予想されるハッシュ値と比較されます。これにより、ファイルが完了し、改ざんされていないかどうかを効果的に確認できます。

実際のアプリケーションでは、適切なハッシュアルゴリズムとハッシュ値のタイムリーな検証を使用すると、システムのセキュリティを大幅に改善し、ファイルの信頼性と整合性を確保できます。