PHP crypt()
的输出长度是多少?
md5()
输出为128位并生成一个包含32个字符的字符串,因此在数据库中您将其放在char(32)
列中,crypt()
怎么样?
答案 0 :(得分:20)
注意:完全限于以这种方式提问,请参阅http://php.net/crypt
更多细节:
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)和空盐,输出长度为:< / p>
26 :: 3 (`$1$`) + 0 (empty salt) + 1 (`$`) + 22 (hash - 128 bits, base 64)
如果在PHP的crypt
默认为所述MD5并且调用未指定salt的系统上,crypt
将生成盐。这种盐通常是8个字符长。输出长度为:
34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash)
在这种情况下,您的数据库表列char(32)
将报告插入或截断错误 - 具体取决于您使用的数据库服务器。
但MD5示例没有实际意义,我之所以选择它,是因为您在问题中已将其添加,但您不应将MD5与crypt
一起使用(请参阅:Md5crypt Password scrambler is no longer considered safe by author)。
相反,我们来看看Blowfish散列(CRYPT_BLOWFISH
)。它有一个两位数的成本参数,并且盐的长度始终为22(如果给出较短的盐,则用$
填充):
60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash)
对于Blowfish crypt hash算法(bcrypt,OpenBSD Blowfish; Hashcat模式3200),固定长度为60。
正如您所看到的,输出长度取决于使用的哈希算法,盐的长度,甚至一些特定于哈希的参数,例如 cost 。
例如,如果你选择SHA512,999 999 999轮和16字节长盐,输出长度为:
123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash)
这个例子可能有点极端,只是为了显示图片。
其他crypt
相关问题:
答案 1 :(得分: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
答案 2 :(得分:0)
正如您在documentation中所看到的,&#39;&#39;&#39; crypt()&#39;&#39;&#39;函数用于各种不同的散列算法。因此长度可以不同,并且取决于默认的散列算法,该算法可以由文档中描述的常量确定。
答案 3 :(得分:0)
crypt()依赖于可用的加密方法。 PHP最常用的方法是MD5,它总是返回32个字符。其他方法如DES和Blowfish返回可变长度的字符串。
您需要知道crypt()函数在您的服务器中使用的方法。