PHP crypt() 的输出长度是多少? [已关闭]

问题描述 投票:0回答:4

PHP 的输出长度是多少

crypt()

md5()
输出是128位并产生一个包含32个字符的字符串,所以在数据库中你将其放入
char(32)
列中,那么
crypt()
呢?

php hash crypt
4个回答
21
投票

注意:以这种方式提出问题是完全有限的,请参阅http://php.net/crypt

更多细节:

  • 成功后,返回字符串的长度可以在 13 到 123 之间变化。
  • 输出长度取决于所使用的哈希算法。您的问题中它仍然未定义。
  • 输出长度取决于传递给函数的盐。您的问题中它仍然未定义。
  • crypt
    始终返回哈希字符串或短于 13 个字符的字符串,并保证在失败时与盐不同。

示例:

让我们从简单的

crypt
调用和基于标准 DES 哈希的有效的两个字符盐开始:

 13 :: 2 (salt) + 11 (hash - 64 bits, base 64)

如果您使用 PHP 的

crypt
以及特定的 MD5(此处更好的名称为:md5crypt、MD5(Unix)、FreeBSD MD5、Cisco-IOS MD5;Hashcat 模式 500)和空盐,则输出长度为:

 26 :: 3 (`$1$`) + 0 (empty salt) + 1 (`$`) + 22 (hash - 128 bits, base 64)

如果在 PHP 的

crypt
默认为上述 MD5 的系统上,并且调用时未指定盐,
crypt
将生成盐。该盐的长度通常为 8 个字符。那么输出长度是:

 34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash)

在这种情况下,您的数据库表列

char(32)
会在插入或截断时报告错误 - 取决于您使用的数据库服务器。

但是 MD5 示例没有实际意义,我选择它是因为您的问题中有它,但您不应该将 MD5 与

crypt
一起使用(请参阅:Md5crypt 密码加扰器不再被作者视为安全)。

我们来看看 Blowfish 哈希 (

CRYPT_BLOWFISH
)。它有一个两位数的 cost 参数,盐长度始终为 22(如果给出较短的盐,则用
$
填充):

 60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash)

对于 Blowfish crypt 哈希算法(bcrypt、OpenBSD Blowfish;Hashcat 模式 3200),固定长度为 60。

如您所见,输出长度取决于所使用的哈希算法、盐的长度,甚至取决于一些哈希特定参数,例如cost

例如,如果您选择具有 999 999 999 轮和 16 字节长盐的 SHA512,则输出长度为:

123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash)

这个例子可能有点极端,只是为了展示图片。


其他

crypt
相关问题:


0
投票

返回散列字符串或小于 13 的字符串 字符,并保证在失败时与盐不同。

crypt() 将使用基于标准 Unix DES 的散列字符串 算法或可能可用的替代算法 系统。

某些操作系统支持不止一种类型的哈希。实际上, 有时基于 DES 的标准算法会被基于 MD5 的算法所取代 算法。哈希类型由 salt 参数触发。之前 5.3 中,PHP 将根据系统的 crypt() 在安装时确定可用的算法。如果没有提供盐,PHP 将 自动生成标准的两个字符 (DES) 盐或十二个字符 字符 (MD5),具体取决于 MD5 crypt() 的可用性。 PHP 设置一个名为 CRYPT_SALT_LENGTH 的常量,表示最长的 可用哈希值允许的有效盐。

了解更多:http://php.net/crypt


0
投票

正如您在文档中看到的,“crypt()”函数与各种不同的哈希算法一起使用。因此长度可以不同,并且取决于默认的哈希算法,该算法可以由文档中描述的常量确定。


0
投票

crypt() 依赖于可用的加密方法。 PHP 最常用的方法是 MD5,它始终返回 32 个字符。其他方法(如 DES 和 Blowfish)返回可变长度的字符串。

您需要知道 crypt() 函数在您的服务器中使用什么方法。

© www.soinside.com 2019 - 2024. All rights reserved.