【问题标题】:How to use Taylor Hornby's password hashing functions如何使用 Taylor Hornby 的密码散列函数
【发布时间】:2014-08-26 02:33:44
【问题描述】:

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

【问题讨论】:

标签: php security passwords password-hash


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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);
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-29
        • 1970-01-01
        • 2019-02-15
        • 2018-09-21
        • 2017-06-21
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        相关资源
        最近更新 更多