什么是PHP的输出长度crypt()
md5()
输出是128位并产生一个字符串32个字符,因此在数据的基础上你把在一个char(32)
柱,怎么样的crypt()
什么是PHP的输出长度crypt()
md5()
输出是128位并产生一个字符串32个字符,因此在数据的基础上你把在一个char(32)
柱,怎么样的crypt()
注:这是完全限制在问这个问题呀,看http://php.net/crypt
一些细节:
crypt
总是返回散列字符串或字符串短于13个字符,并保证从在发生故障时的盐不同。 例子:
让我们用一个简单的轻轻启动crypt
通话和基于标准DES-哈希有效的两个字符的盐:
13 :: 2 (salt) + 11 (hash - 64 bits, base 64)
如果您使用PHP的crypt
和specificly MD5(这里命名为更好:md5crypt,MD5(UNIX),FreeBSD的MD5,思科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密码加扰器不再被认为是由作者的安全 )。
相反,让我们看看到河豚散列( CRYPT_BLOWFISH
)。 它有一个两位数字的成本参数和总的22盐长度(如果较短的盐被给予,则用填充符$
S):
60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash)
对于河豚隐窝哈希算法(bcrypt,OpenBSD的河豚; Hashcat模式3200)有60的固定长度,然后。
正如你可以看到输出长度取决于所使用的哈希算法,盐的长度,甚至像一些成本哈希具体参数。
如果你用999 999 999轮和一个16字节长的盐SHA512的例子选择,输出长度为:
123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash)
这个例子是一个稍微有点极端,也许,只是显示图片。
其他crypt
相关的问题:
返回散列字符串或字符串短于13个字符,并保证从在发生故障时的盐不同。
隐窝()将返回使用标准的基于DES-Unix的算法或算法的替代可能在系统上可用散列字符串。
有些操作系统支持多个散列类型。 事实上,有时标准的基于DES的算法是由基于MD5的算法代替。 散列类型由盐参数触发。 在此之前5.3,PHP将决定基于系统的地穴在安装时可用的算法()。 如果没有提供盐,PHP将自动生成一个标准两种字符(DES)的盐,或者十二字符(MD5),这取决于MD5隐窝的可用性()。 PHP设置了一个名为不变CRYPT_SALT_LENGTH指示由可用散列允许的最长有效期盐。
阅读更多: http://php.net/crypt
正如你可以看到在文档中,“”“的crypt()”“”函数用于各种不同的散列算法。 这样的长度可以是不同的并依赖于能够由所述文档中描述的常数确定的默认哈希算法。
的crypt()依赖于可用的加密方法。 PHP最常用的方法是MD5,它总是返回32个字符。 其他的方法,如DES和可变长度的河豚返回字符串。
你需要知道的crypt()函数在您的服务器使用的是什么方法。