哈希(hashing) 表示一种加密数据(特别是文本)以获得固定长度值的技术。PHP 库包含许多函数,这些函数可以通过应用不同的哈希算法(如 md5、SHA2、HMAC 等)对数据执行哈希。获取的加密值称为原始密钥的哈希值。
哈希的处理是一个单向的过程,从某种意义上说,不可能为了得到原始密钥而反转哈希。
哈希应用
哈希技术有效地用于以下目的 -
密码身份验证
我们经常注册各种在线应用程序,您需要填写一份表格,在其中为在线帐户创建密码。服务器对您的密码进行哈希处理,哈希值存储在数据库中。登录时,提交的密码经过哈希处理并与数据库中的密码进行比较。这样可以防止您的密码被盗。
数据完整性
哈希的重要用途之一是验证数据是否未被篡改。从 Internet 下载文件时,将显示其哈希值,您可以将其与下载的值进行比较,以确保文件未损坏。
哈希过程
哈希的过程可以用下图来表示 -
PHP 哈希算法
PHP 支持多种哈希算法 -
算法 | 描述 |
---|---|
MD5 | MD5 是一种 128 位哈希函数,广泛用于软件中,用于验证传输文件的完整性。128 位哈希值通常表示为 32 位十六进制数。例如,单词 “frog” 总是生成哈希值 “8b1a9953c4611296a827abf8c47804d7” |
SHA | SHA 代表安全哈希算法。这是由美国国家标准与技术研究院 (NIST) 制定的一系列标准。SHA 是 MD5 的修改版本,用于对数据和证书进行哈希处理。SHA-1 和 SHA-2 是该算法的两个不同版本。SHA-1 是一个 160 位哈希值。SHA-2 实际上是哈希的“家族”,有多种长度,最流行的是 256 位。 |
HMAC | HMAC(基于哈希的消息身份验证代码)是一种使用哈希函数和密钥的加密身份验证技术。 |
HKDF | HKDF 是基于 HMAC 消息身份验证代码的简单密钥派生函数 (KDF)。 |
PBKDF2 | PBKDF2(基于密码的密钥派生函数 2)是一种从密码创建加密密钥的哈希算法。 |
PHP 哈希函数
PHP 库包括几个哈希函数 -
hash_algos 函数
此函数返回一个数字索引数组,其中包含支持的哈希算法列表。
hash_algos(): array
hash_file 函数
该函数返回一个字符串,其中包含以小写 hexits 形式计算的消息摘要。
hash_file(
string $algo,
string $filename,
bool $binary = false,
array $options = []
): string|false
algo 参数是所选哈希算法的类型(即 “md5”、“sha256”、“haval160,4” 等)。filename 是描述要进行哈希处理的文件位置的 URL,支持 Fopen 包装器。
例子
请看下面的例子 -
<?php
/* 创建一个文件来计算哈希值 */
$fp=fopen("Hello.txt", "w");
$bytes = fputs($fp, "那只敏捷的棕色狐狸跳过了那条懒狗。");
fclose($fp);
echo hash_file('md5', "Hello.txt");
?>
将产生以下输出 -
hash() 函数
hash() 函数生成哈希值(消息摘要)-
hash(
string $algo,
string $data,
bool $binary = false,
array $options = []
): string
algo 参数是所选哈希算法的类型(即 “md5”、“sha256”、“haval160,4” 等)。
data 参数是要进行哈希处理的消息。
如果 binary 参数为 “true”,则输出原始二进制数据;“false” 输出小写的 hexits。
例子
该函数返回一个字符串,其中包含以小写 hexits 形式计算的消息摘要。
<?php
echo "使用 SHA256 算法:" . hash('sha256', '那只敏捷的棕色狐狸跳过了那条懒狗。'). PHP_EOL;
echo "使用 MD5 算法:",hash('md5', '那只敏捷的棕色狐狸跳过了那条懒狗。'), PHP_EOL;
echo "使用 SHA1 算法:" . hash('sha1', '那只敏捷的棕色狐狸跳过了那条懒狗。');
?>
它将产生以下输出 -
使用 MD5 算法:d046369a69837407b7fcc62b320c48d5
使用 SHA1 算法:a8c1888c1b6325e7b9b986f45f3f0de87774f323