繁体   English   中英

password_hash中的默认算法是什么

[英]What is the default algorithm in password_hash

阅读有关PHP 5.5的新password_hash函数的文档,我想知道,默认算法是什么:

password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

有关它的文档没有说明这一点: http//www.php.net/manual/en/password.constants.php

我已经了解了PHP源代码。 它默认为PHP5.5中的bcrypt。

ext/standard/php_password.h line 31

#define PHP_PASSWORD_DEFAULT    PHP_PASSWORD_BCRYPT

这已在password_hash()的文档中更新,并将在常量页面中更新(我刚刚提交了大约一个小时左右的文档更改)。

今天将在password.constants上播放

从更新的常量页面(尚未生效,但今天晚些时候):

可用算法:

  • PASSWORD_BCRYPT (integer)

    PASSWORD_BCRYPT用于使用CRYPT_BLOWFISH算法创建新的密码哈希值。

    这将始终导致使用“$ 2y $”crypt格式的哈希值,该格式总是60个字符宽。

    支持的选项:

    • salt - 在散列密码时手动提供盐。 请注意,这将覆盖并防止自动生成salt。

      如果省略,则每个密码哈希值都会通过password_hash()生成随机盐。 这是预期的操作模式。

    • 成本 - 表示应该使用的算法成本。 可以在crypt()页面上找到这些值的示例。

      如果省略,将使用默认值10。 这是一个很好的基准成本,但您可能需要考虑根据您的硬件增加它。

  • PASSWORD_DEFAULT (integer)

    如果未提供算法,则用于散列的默认算法。 当支持更新,更强大的哈希算法时,这可能会在较新的PHP版本中发生变化。

    值得注意的是,随着时间的推移,这个常数会(并且可能会)发生变化。 因此,您应该知道生成的哈希的长度可以更改。 因此,如果使用PASSWORD_DEFAULT,则应该以可以存储超过60个字符的方式存储生成的哈希值(255是推荐的宽度)。

    此常量的值:

    • PHP 5.5.0 - PASSWORD_BCRYPT

至于何时以及如何更新PASSWORD_DEFAULT ,请访问password_hash()文档页面

注意:此功能对受支持算法的更新(或对默认算法的更改)必须遵循以下规则:

  • 在成为默认值之前,任何新算法必须在核心中至少有1个完整版本的PHP。 因此,例如,如果在5.5.5中添加了新算法,则在5.7之前它将不符合默认条件(因为5.6将是第一个完整版本)。 但是如果在5.6.0中添加了不同的算法,它也有资格默认为5.7.0。

  • 默认值应仅在完整版本(5.6.0,6.0.0等)上更改,而不在修订版本上更改。 唯一的例外是在当前默认情况下发现严重安全漏洞的紧急情况。

如果措辞有点差,那么文档实际上是相当具体的; 哈希是PHP认为当时可用的最强的哈希值,并且随时可能发生变化。 password_hash生成的哈希在开始时包含一些数据,指示最初用于生成它们的数据,允许在新哈希算法可用时自动进行此类升级,而不会破坏已存储在数据库中的任何哈希值。

由于bcrypt是当前定义的唯一算法,你可以假设它是默认的,但是一种快速的验证方法是制作一个简单的PHP脚本,它将两次相同的字符串,每个选项一次,并使用固定的盐,打印出最终的哈希值; 他们可能会匹配。

原始的password_hash规范也可能有所帮助。 https://wiki.php.net/rfc/password_hash

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM