1

我一直在阅读有关密码哈希的信息。我真的不擅长 php。谁能告诉我如何使用 Taylor Hornby 的密码哈希函数,如此处所示

4

3 回答 3

2

您链接到的类实现了一个很好的算法(PBKDF2)来散列密码,但是在 PHP 中这样的实现存在一个大问题。

密码的适当散列算法包括一个成本因素,您可以使用它来控制计算散列值的必要时间。成本值越高,进行的散列次数就越多。由于 PHP 比原生 C 实现慢,并且您不想等待几秒钟的登录,因此您将执行更少的散列轮次。这削弱了密码哈希,一个可以使用GPU的破解工具将具有很大的优势。

这就是 PHP 提供BCrypt 算法的本机实现password_hash()的原因:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

请改用此函数,即使链接的实现似乎做得很好。

于 2014-07-05T07:05:04.827 回答
2

您将首先包含 PHP 文件,您可以在此处查看如何执行操作。您还需要自定义文件以匹配您想要使用的哈希函数。sha256 将是一个不错的选择。

然后,您将使用您的密码运行该create_hash函数,并将返回的值存储到您的数据库中。

要验证密码,您将运行该validate_password函数,使用来自数据库的哈希和用户输入的密码。您不需要使用其他两个函数,validate_password并使用create_hash您需要的所有参数为您运行这些函数。

密码学很复杂,可能会让人困惑,因此在存储密码等机密信息之前先了解一下安全性是个好主意,因为设置错误可能意味着您的密码存储不安全。此页面提供了有关如何安全存储密码的一些技术细节。

于 2014-07-04T19:01:47.657 回答
1

在看到这个问题并与 defuse 讨论之后,我提交了他的密码哈希类的第一个示例。更多内容取决于需求和空闲时间:

https://github.com/defuse/password-hashing/tree/master/examples

于 2014-07-15T18:21:43.103 回答