如何使用Taylor Hornby的密码散列函数

时间:2014-07-04 18:54:02

标签: php security passwords password-hash

我一直在阅读有关密码哈希的信息。我真的不擅长PHP。谁能告诉我如何使用Taylor Hornby的密码散列函数here?

3 个答案:

答案 0 :(得分:2)

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

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

要验证密码,您需要运行validate_password函数,使用数据库中的哈希值和用户输入的密码。您不需要使用的其他两个功能validate_passwordcreate_hash将为您提供所需的所有参数。

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

答案 1 :(得分: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);

使用此功能,即使链接的实现似乎做得很好。

答案 2 :(得分:1)

在看到这个问题并使用defuse进行讨论之后,我已经提交了他的密码哈希类的第一个例子。根据需求和空闲时间更多关注:

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