当前位置: 首页> 最新文章列表> 如何在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()