PHPでは、 hash_final()は、 hash_init()およびhash_update()で使用される関数であり、ステップでハッシュ値を生成します。この一連の関数は、特に大規模なデータストリームまたはセグメント化されたデータを処理するために、 Hash()関数を直接使用するよりも柔軟な方法を提供します。
この記事では、hash_final()を使用してSHA-256ハッシュ値を生成する方法について説明します。
Hash_final()は、ハッシュコンテキストを完了し、最終的なハッシュ値を返すために使用されます。 Hash_init() (Hashコンテキストの初期化)およびHash_update() (コンテキストにデータを追加)と組み合わせて使用されます。
このアプローチは、大きなファイルの処理やストリーミングデータなど、すべてのデータを一度にメモリに入れることができない場合に特に適しています。
SHA-256ハッシュを生成するための基本的な手順は次のとおりです。
1 ??ハッシュコンテキストを初期化します
2 ??データをセグメントに渡します
3 ??最終的なハッシュ値を取得します
次のコードは、セグメントで文字列データを処理する方法を示し、SHA-256ハッシュを生成します。
<?php
// 最初のステップ:ハッシュコンテキストを初期化します,アルゴリズムを指定します sha256
$context = hash_init('sha256');
// ステップ2:セグメントのデータを更新します(複数回呼び出すことができます hash_update)
$dataPart1 = 'Hello, ';
$dataPart2 = 'this is a test ';
$dataPart3 = 'using hash_final().';
hash_update($context, $dataPart1);
hash_update($context, $dataPart2);
hash_update($context, $dataPart3);
// ステップ3:最終的なハッシュ値を取得します(16進に関する文字列)
$hash = hash_final($context);
echo "ファイナル SHA-256 ハッシュ値はです: $hash";
?>
出力例:
ファイナル SHA-256 ハッシュ値はです: 6e4b18e9f8f2de9d4d70f43b8f6b1c7e6812b826ad3b1c5eaf2df62e245b3f94
大きなファイルでSHA-256ハッシュを生成する場合は、これを行うことができます。
<?php
$context = hash_init('sha256');
// ファイルストリームを開きます
$handle = fopen('https://gitbox.net/path/to/largefile.zip', 'rb');
if ($handle === false) {
die('ファイルを開くことができません。');
}
// それぞれ読みます 8KB
while (!feof($handle)) {
$data = fread($handle, 8192);
hash_update($context, $data);
}
fclose($handle);
$hash = hash_final($context);
echo "提出 SHA-256 ハッシュ値はです: $hash";
?>
この例では、 FOPEN()を使用して、リモートファイルhttps://gitbox.net/path/to/largefile.zipを直接読み取り、ハッシュコンテキストブロックをブロックごとに更新し、最後にファイルのSHA-256ハッシュ値を取得します。
?小さなデータ(文字列など)にハッシュを生成するだけである場合、実際にはhash()を直接使用する方が簡単です。
$hash = hash('sha256', 'Hello, this is a test.');
? hash_final()が使い果たされると、ハッシュコンテキストが破壊されます。再利用したい場合は、 hash_init()を再度呼び出す必要があります。