Note:以这种方式提出问题完全受到限制,请参阅http://php.net/crypt http://php.net/crypt
更多细节:
- 成功后,返回字符串的长度可以在 13 到 123 之间变化。
- 输出长度取决于所使用的哈希算法。您的问题中它仍然未定义。
- 输出长度取决于传递给函数的盐。您的问题中它仍然未定义。
-
crypt
始终返回散列字符串或短于 13 个字符的字符串,并保证在失败时与 salt 不同。
例子:
让我们从一个简单的开始crypt
调用和基于标准 DES 哈希的有效两字符盐:
13 :: 2 (salt) + 11 (hash - 64 bits, base 64)
如果你使用 PHPcrypt
特别是 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
(see: 作者认为 Md5crypt 密码加扰器不再安全 http://phk.freebsd.dk/sagas/md5crypt_eol.html).
相反,让我们看一下 Blowfish 哈希(CRYPT_BLOWFISH
)。它有一个两位数cost参数并且盐长度始终为 22(如果给出较短的盐,则用$
s):
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)
这个例子可能有点极端,只是为了展示图片。
Other crypt
相关问题:
- crypt() 的替代方法 https://stackoverflow.com/q/8662207/367456
- 与 PHP 中的 crypt() 比较密码 https://stackoverflow.com/q/3135524/367456
- 你能将 php crypt() 的输出转换为有效的 MD5 吗? https://stackoverflow.com/q/461800/367456