什么是PHP的输出长度crypt()?
md5()输出是128位并产生一个包含32个字符的字符串,所以在数据库中你将它放在一char(32)列中,那么crypt()?
hak*_*kre 20
注意:完全限于以这种方式提问,请参阅http://php.net/crypt
更多细节:
crypt 始终返回散列字符串或短于13个字符的字符串,并保证与失败时的盐不同.例子:
让我们通过一个简单的crypt调用和一个有效的双字符盐轻松启动标准的基于DES的哈希:
13 :: 2 (salt) + 11 (hash - 64 bits, base 64)
Run Code Online (Sandbox Code Playgroud)
如果您使用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)
Run Code Online (Sandbox Code Playgroud)
如果在PHP crypt默认为所述MD5的系统上并且调用它而不指定salt,crypt则会生成salt.这种盐通常是8个字符长.输出长度是:
34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的数据库表列char(32)将报告插入或截断时的错误 - 具体取决于您使用的数据库服务器.
但是MD5的例子没有实际意义,我之所以选择它是因为你在问题中有它,但你不应该使用MD5 crypt(参见:Md5crypt密码扰码器不再被作者认为是安全的).
相反,我们来看看Blowfish哈希(CRYPT_BLOWFISH).它有一个两位数的成本参数,并且盐的长度始终为22(如果给出较短的盐,则用$s 填充):
60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash)
Run Code Online (Sandbox Code Playgroud)
对于Blowfish crypt hash算法(bcrypt,OpenBSD Blowfish; Hashcat模式3200),固定长度为60.
正如您所看到的,输出长度取决于使用的哈希算法,盐的长度,甚至一些特定于哈希的参数,如成本.
例如,如果您选择SHA512与999 999 999轮和16字节长盐,输出长度为:
123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash)
Run Code Online (Sandbox Code Playgroud)
这个例子可能有点极端,只是为了显示图片.
其他crypt相关问题: