PHP密码\u哈希()密码\u验证()最大密码长度?

PHP密码\u哈希()密码\u验证()最大密码长度?,php,security,php-password-hash,Php,Security,Php Password Hash,PHP5.5password\u hash()和password\u verify()可以使用的最大密码长度是多少?password\u hash函数不应该有任何长度限制。该函数没有任何限制,您只需要记住内存限制,就可以了 编辑:您应该限制密码长度,否则可能会降低服务器速度(取决于算法) 见django: 编辑2:澄清一下:不应该限制为14-20个字符,应该是4KB或更多。密码\u哈希本身没有长度限制 然而,河豚 具有64位块大小和从32位到448位的可变密钥长度。它是一个16轮的Feistel

PHP5.5
password\u hash()
password\u verify()
可以使用的最大密码长度是多少?

password\u hash函数不应该有任何长度限制。

该函数没有任何限制,您只需要记住内存限制,就可以了

编辑:您应该限制密码长度,否则可能会降低服务器速度(取决于算法)
见django:


编辑2:澄清一下:不应该限制为14-20个字符,应该是4KB或更多。

密码\u哈希本身没有长度限制

然而,河豚

具有64位块大小和从32位到448位的可变密钥长度。它是一个16轮的Feistel密码,使用大型密钥相关S盒。在结构上,它类似于使用固定S盒的CAST-128。(


这意味着当使用CRYPT_BLOWFISH作为密码时,有效限制为56个字符(这是默认值)。

好的,让我们来看看这个

函数没有密码长度限制。就像PHP中的所有字符串一样,它被限制为2^31-1字节

需要明确的是,PHP无法处理比这更大的问题(至少在今天)

因此,功能本身是有限的。但是底层的加密算法呢

BCrypt仅限于处理密码的前72个字符。然而,这通常不是一个问题


因此,简而言之,yes它确实有一个有效的限制(它将只“使用”具有默认和唯一算法的前72个字符),并且这不是问题,您也不应该尝试“修复”或“缓解”它。

您是否阅读了该函数的文档页面?是的,我阅读了。我很困惑,因为BCRYPT确实有一个最大密码长度。正如链接问题中所述,最多72个字符,但它不是
password\u hash()
limit,而是算法限制。默认算法可能会在将来更改,它使用的有效字节数也可能会更改。而且这并不是真正的限制,因为您可以使用更长的密码,只是不要期望只有在字符限制之后才不同的两个密码的哈希值不同。@boblapointe查看一下我的更新;)至少没有人会通过打字打到的。是的。我猜它可能会达到内存限制或类似的限制。但我无法想象函数本身有任何字符串长度限制。错!限制密码的长度不是一个好主意。它不会降低服务器的速度,只会降低密码的熵。@MadaraUchiha好吧,你真的认为将密码限制在4KB左右是个坏主意吗(参见答案中的链接)?或者你真的认为有人会使用4KB长的密码吗?@bwoebi:我认为你的系统不应该强制执行硬限制。此外,河豚会在几个字符后切断你的密码。这完全取决于您的算法。@MadaraUchiha依赖于此是不向前兼容的。可能会添加另一个不会中断任何内容的算法,您只需快速更改该算法……然后问题就出现了。@bwoebi:如果您声明使用哪个算法,而不是使用默认值,则是向前兼容的。
password\u hash
。密码/密码短语的72个字符限制肯定是个问题,当它无声地告诉你额外的字符被忽略时,情况就更糟了。