PHP – 哈希算法



“哈希”一词表示一种加密数据(特别是文本)以获得固定长度值的技术。PHP 库包含许多函数,可以通过应用不同的哈希算法(例如 md5、SHA2、HMAC 等)对数据执行哈希操作。获得的加密值称为原始密钥的哈希值。

哈希处理是一个单向过程,这意味着不可能反转哈希以获得原始密钥。

哈希的应用

哈希技术有效地用于以下目的:

密码认证

我们经常注册各种在线应用程序,例如 Gmail、Facebook 等。您需要填写一个表单,在其中为在线帐户创建密码。服务器会对您的密码进行哈希处理,并将哈希值存储在数据库中。登录时,提交的密码将被哈希处理,并与数据库中的密码进行比较。这可以保护您的密码不被窃取。

数据完整性

哈希的一个重要用途是验证数据是否未被篡改。当从互联网下载文件时,会显示其哈希值,您可以将其与下载的文件进行比较,以确保文件未被损坏。

哈希的过程

哈希过程可以用下图表示:

PHP Hashing

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 函数

该函数返回一个字符串,其中包含计算出的消息摘要,以小写十六进制表示。

hash_file(
   string $algo,
   string $filename,
   bool $binary = false,
   array $options = []
): string|false

algo 参数是所选哈希算法的类型(即“md5”、“sha256”、“haval160,4”等)。filename 是描述要哈希的文件位置的 URL;支持 fopen 包装器。

示例

请看下面的例子:

<?php
   /* Create a file to calculate hash of */
   $fp=fopen("Hello.txt", "w");
   $bytes = fputs($fp, "The quick brown fox jumped over the lazy dog.");
   fclose($fp);
   echo hash_file('md5', "Hello.txt");
?>

它将产生以下输出

5c6ffbdd40d9556b73a21e63c3e0e904

hash() 函数

hash() 函数生成哈希值(消息摘要):

hash(
   string $algo,
   string $data,
   bool $binary = false,
   array $options = []
): string

algo 参数是所选哈希算法的类型(即“md5”、“sha256”、“haval160,4”等)。data 参数是要哈希的消息。如果 binary 参数为“true”,则输出原始二进制数据;“false”输出小写十六进制数。

示例

该函数返回一个字符串,其中包含计算出的消息摘要,以小写十六进制表示。

<?php
   echo "Using SHA256 algorithm:" . hash('sha256', 'The quick brown fox jumped over the lazy dog.'). PHP_EOL;
   echo "Using MD5 algorithm:",hash('md5', 'The quick brown fox jumped over the lazy dog.'), PHP_EOL;
   echo "Using SHA1 algorithm:" . hash('sha1', 'The quick brown fox jumped over the lazy dog.');
?>

它将产生以下输出

Using SHA256 algorithm:68b1282b91de2c054c36629cb8dd447f12f096d3e3c587978dc2248444633483
Using MD5 algorithm:5c6ffbdd40d9556b73a21e63c3e0e904
Using SHA1 algorithm:c0854fb9fb03c41cce3802cb0d220529e6eef94e
广告