當前位置: 首頁> 最新文章列表> 如何在PHP中使用hash_final 生成SHA-256哈希?

如何在PHP中使用hash_final 生成SHA-256哈希?

gitbox 2025-05-27

在PHP 中, hash_final()是與hash_init()hash_update()一起使用的,用於分步生成哈希值的函數。這套函數提供了比直接使用hash()函數更靈活的方式,尤其適用於處理大型數據流或分段處理數據。

本文將介紹如何使用hash_final()來生成SHA-256 哈希值。

什麼是hash_final()

hash_final()用於完成哈希上下文,並返回最終的哈希值。它與hash_init() (初始化一個哈希上下文)和hash_update() (向上下文中添加數據)結合使用。

這種方法特別適合當你不能一次性將所有數據放入內存時,比如處理大文件或流式數據。

基本步驟

以下是生成SHA-256 哈希值的基本步驟:

1?? 初始化哈希上下文
2?? 將數據分段傳入
3?? 獲取最終哈希值

示例代碼

以下代碼演示瞭如何分段處理字符串數據,並生成SHA-256 哈希值。

 <?php
// 第一步:初始化哈希上下文,指定算法為 sha256
$context = hash_init('sha256');

// 第二步:分段更新數據(可以多次調用 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);

// 第三步:獲取最終的哈希值(十六進製字符串)
$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()