散列

散列是现代编程最重要的方面之一。就数据安全和隐私而言,散列在计算机密码学中发挥着关键作用。我们不愿意让自己的数据对所有人都不安全和开放。PHP 有几个内置的散列函数。让我们快速浏览一下:

  • md5:计算给定字符串的 md5 哈希值。它将为提供的每个字符串生成 32 个字符的唯一哈希值。散列是单向的,这意味着没有将散列字符串解密为实际字符串的功能。

  • sha1:此函数计算给定字符串的 sha1 散列值。生成的哈希值长度为 40 个字符。与 md5 一样,sha1 也是单向散列。如果我们将第二个参数设置为 true,那么函数将生成 20 个字符的原始输出哈希字符串。需要注意的是,sha1、sha256 和 md5 用于密码散列不够安全。由于它们非常快速高效,黑客往往使用它们进行暴力攻击,并从生成的哈希值中找到实际输入

  • crypt:该函数为给定字符串生成单向散列密钥,并可选择盐字符串。如果使用的是 PHP 7,函数调用时如果没有提供任何盐,则会产生 E_NOTICE。在散列方面,该函数使用基于 UNIX DES 算法或其他可用的散列算法。

  • password_hash:这是另一个有用的函数,用于生成密码的哈希值。它需要两个参数,一个是实际字符串,另一个是散列算法。默认散列算法使用 bcrypt 算法,备用选项是 blowfish 算法。

  • password_verify:如果我们使用 password_hash 函数生成了密码,就可以使用该函数。函数的第一个参数是输入的密码,第二个参数是散列字符串。函数根据验证部分返回 true 或 false。

  • hash_algos:如果我们想知道系统中已注册的散列算法列表,可以使用此函数。它将列出当前系统中所有可能的哈希算法选项。

  • hash:该函数接收一个强制散列算法名称和一个要散列的字符串,以生成一个散列密钥。还有一个可选参数用于获取散列的原始二进制输出。散列密钥的长度将根据所选算法而有所不同。

PHP 拥有丰富的散列和密码学函数和库。如需进一步阅读,可以参考 PHP.net 文档以及下一节中提到的其他一些网站。