php 5.3.3 的密码保护


Password protection for php 5.3.3?

我正在为 uni 做一项作业,我一直在遵循指南,以找到一种将注册密码散列到 mysqli 数据库的方法,但似乎大学的 myphp 仅在 5.3.3 和 MySQL 5.1.73 上。

我可以使用什么来散列它而不是使用 5.5 的 password_hash(( 函数?不要以为那里有一个方便的教程吗?

非常感谢!

您的最佳答案:

让他们升级到 PHP 5.5 或更高版本,并使用具有高工作系数的 password_hash((。

将他们指向Thomas Pornin的规范Security.stackexchange对如何安全地散列密码的回答,让他帮助争论良好的密码安全性。

您的下一个最佳答案:

让他们升级到 PHP 5.3.7 或更高版本并使用 password_hash(( 兼容包

见上文。

你不太好的答案:

如果您更改某些选项,则可以在当前的PHP 5.3.3版本上合理地使用crypt:

crypt('password', '$6$rounds=150000$PerUserCryptoRandomSalt$')
  • 6 美元 - 使用 SHA-512,它具有 64 位操作,可降低大多数基于 GPU 的攻击者在 2016 年初对您的优势。

  • $rounds=150000 - 将迭代次数设置为数十万或高数万轮。

  • PerUserCryptoRandomSalt - 与password_hash不同,你必须自己做这件事。 您需要生成一个 12-24 个二进制字节的唯一加密随机盐(16 是非常合理的(

    • 请注意,它是明文格式的结果字符串的一部分,这是正确的。

    • 那是二进制字节! 如果你转换为十六进制,crypt(( 函数中的大小会加倍,如果你 Base64 它,它会增加 4/3rds

为了进行比较,您可以获得用户的盐和轮数,并使用crypt与输入的候选密码上的密码一起使用。 如果您得到相同的答案,则使用相同的密码。