- 此问题在此处已有答案**:
Secure hash and salt for PHP passwords(14个答案)
Which is the best password hashing algorithm for PHP? [duplicate](1个答案)
七年前就关门了。
PHP中最安全的密码哈希算法是什么?
速度无关紧要,因为我是在固定的时间内(而不是固定的迭代次数)迭代哈希,我感兴趣的是数学强度。
我的直觉告诉我是漩涡,是最大最慢的一个。或者是SHA-512。Maven推荐的是哪一个?
是否有任何其他算法提供超过 * 512位 * 的散列?
2条答案
按热度按时间piztneat1#
使用函数
password_hash()
。如果您允许(通过指定PASSWORD_DEFAULT
),它会选择推荐的算法,目前是BCrypt,如果算法发生变化,不需要修改代码,如果愿意,也可以使用常量PASSWORD_BCRYPT
显式选择这个算法,但这与当更好的算法在未来版本中可用时自动更新到更好的算法的意图相反。您可以使用
password_verify()
来验证密码。PHP会将使用过的算法添加到散列值中,并添加一个salt,这样它就知道了验证所需的所有信息。这样,当新的算法在新版本的PHP中可用时,它们会被自动使用,这些密码将具有更强的散列值。
您可以使用
password_needs_rehash()
检查是否需要重新散列密码,如果默认值发生变化。如果密码通过验证,你可以重新散列并存储它,这样当用户登录时,你就可以用较弱的散列自动更新旧密码。
yzckvree2#
scrypt
是最安全的散列算法,这是有争议的,因为它受RAM限制,因此难以并行化。然而,许多当前系统(如果有的话)并不原生地支持它。bcrypt
是下一个,它没有当前已知的加密弱点,得到广泛支持,工作因子可广泛调整,也是password_hash()
当前的默认算法。其他一切都很差。
除非您拥有密码学学位,否则不要使用自己的哈希或密码方案。
2023更新
值得注意的是,自从PHP7.2 [2017年11月发布] Argon2散列已经在
password_hash()
上可用,前提是PHP在构建时有相关的选项。特别是Argon2id允许指定时间 * 和 * 内存成本参数,可能比bcrypt和scrypt都要好。