📜  PHP | md5()、sha1()、hash() 函数

📅  最后修改于: 2022-05-13 01:56:39.309000             🧑  作者: Mango

PHP | md5()、sha1()、hash() 函数

PHP是一种服务器端脚本语言,这意味着PHP负责网站所需的所有后端功能。身份验证系统是网站最重要的部分之一,也是开发人员犯错误而留下漏洞供他人利用的最常见的部分之一。一个示例可能是以真实形式存储和使用用户密码,这可能会导致未经授权的人员访问数据库并破坏整个系统的情况。

使用密码散列可以轻松防止这种情况。密码散列是一种获取用户密码(可变长度的字符序列)并将其加密为包含更大集合中的随机字符的固定长度密码的方法。 PHP有一些函数可以用来实现相同的目的。

md5()函数

句法:

string md5 ($string, $getRawOutput)

参数:该函数最多需要两个参数,如下所示:

  • $ 字符串:这个参数期望字符串被散列。
  • $getRawOutput:此可选参数需要一个布尔值,为 TRUE 时,函数以长度为 16 的原始二进制格式返回哈希值。

返回类型:此函数返回散列字符串(长度为 32 的小写十六进制字符序列或长度为 16 的原始二进制形式)。

sha1()函数

句法:

string sha1($string, $getRawOutput)

参数:该函数最多需要两个参数,如下所示:

  • $ 字符串:这个参数期望字符串被散列。
  • $getRawOutput:此可选参数需要一个布尔值,如果为 TRUE,则函数以长度为 20 的原始二进制格式返回哈希值。

返回类型:此函数返回散列字符串(长度为 40 的小写十六进制字符序列或长度为 20 的原始二进制形式)。

hash()函数

句法:

string hash($algo, $string, $getRawOutput)

参数:该函数最多可以使用三个参数,如下所示:

  • $algo:此参数需要一个定义要使用的散列算法的字符串。 PHP共有 46 种注册的哈希算法,其中“sha1”、“sha256”、“md5”、“haval160, 4”是最流行的。
  • $ 字符串:这个参数期望字符串被散列。
  • $getRawOutput:此可选参数需要一个布尔值,如果为 TRUE,则函数以原始二进制格式返回哈希值。

返回类型:此函数返回散列字符串(小写十六进制字符序列或原始二进制形式)。

下面的程序说明了 md5()、sha1() 和 hash() 在PHP中的工作:


输出:

The md5  hashed password of Password is: 
a59a0e0fcfab450008571e94a5549225
The sha1 hashed password of Password is: 
a69652ddbc8401ae93b5d2f0390d98abd94fc2f4
The gost hashed password of Password is:
5376160a0d848c327949364b96fb9fd6e13a9b20c58fbab50f418ea9eea3b67f

需要注意的要点

  • 散列算法的复杂性定义了散列本身的好坏。 sha1 和 md5 都不是很复杂,因此专家建议我们只有在风险因素不值得谴责的情况下才应该使用以下算法。
  • 仅使用密码作为输入字符串会产生平庸的结果,但使用盐我们可以增强结果。散列中的盐是一个术语,指的是与密码明确使用的随机字符串。许多开发人员更喜欢使用用户名和其他一些字段(例如示例中的出生日期)作为增加随机性的盐。
  • 散列算法最好是单向路由,即不应该存在解密方法,但所有这些已知算法都可以通过适当实施暴力破解和字典攻击来猜测。

参考

  • http:// PHP.net/manual/en/函数.hash。 PHP
  • http:// PHP.net/manual/en/函数.sha1。 PHP
  • http:// PHP.net/manual/en/函数.md5。 PHP