有没有理由不使用PHP的默认密码哈希库?

时间:2017-01-05 17:15:56

标签: php hash passwords

我是一位相当新的开发人员,我想确保我在安全方面做出正确的决定。根据我的研究,似乎我应该为我的密码使用salted bcrypt哈希算法。根据PHP 7的文档,password_hash功能就是这样做的。我甚至不需要想办法制作自己的盐,因为salting包含在password_hash中。这似乎是PHP 7密码哈希的一个简单正确答案。但是,简单的正确答案通常是错误的。 PHP的默认密码哈希库存在哪些缺陷?

关于PHP密码哈希的大多数答案都得出结论我应该使用password_hash / password_verify。但是,我的问题更接近于我应该如何使用它们?'或者'使用它们时应该注意什么?'

1 个答案:

答案 0 :(得分:1)

似乎您正在寻找确认,所以是的password_hash()功能绝对是可行的方法,您可以通过正常的PHP安装做得更好。此功能是面向未来的,如果有必要,可以更改算法,同时保持与现有哈希的向后兼容性。

你应该做的是:

  1. 使用带参数PASSWORD_DEFAULT的函数,这允许将来切换算法。看看下面的例子。
  2. 将哈希值存储在varchar(255)类型的数据库字段中,以便将来的算法也可以存储它们的哈希值。
  3. 确保使用的是PHP 5.3.7或更高版本,因此该函数会生成标识为$2y$的哈希值(而不是$2a$)。
  4. 示例:

    // Hash a new password for storing in the database.
    // The function automatically generates a cryptographically safe salt.
    $hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
    
    // 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);