是否有任何理由不使用PHP';默认密码哈希库?

是否有任何理由不使用PHP';默认密码哈希库?,php,hash,passwords,Php,Hash,Passwords,我是一个相当新的开发人员,我想确保我在安全方面做出了正确的决策。根据我的研究,似乎我应该对我的密码使用salt-bcrypt散列算法。根据PHP7的文档,password_hash功能正是这样做的。我甚至不用想办法自己做盐,因为盐已经包含在密码杂凑中了。这似乎是PHP7密码哈希的简单正确答案。然而,简单正确的答案往往是错误的。PHP的默认密码哈希库有哪些缺陷 关于PHP密码哈希的大多数答案都认为我应该使用password\u hash/password\u verify。然而,我的问题更接近于“

我是一个相当新的开发人员,我想确保我在安全方面做出了正确的决策。根据我的研究,似乎我应该对我的密码使用salt-bcrypt散列算法。根据PHP7的文档,password_hash功能正是这样做的。我甚至不用想办法自己做盐,因为盐已经包含在密码杂凑中了。这似乎是PHP7密码哈希的简单正确答案。然而,简单正确的答案往往是错误的。PHP的默认密码哈希库有哪些缺陷


关于PHP密码哈希的大多数答案都认为我应该使用password\u hash/password\u verify。然而,我的问题更接近于“我应该如何使用它们?”或“使用它们时应该注意什么?”

似乎您正在寻求确认,所以是的,
密码\u hash()
函数肯定是一条路要走,普通的PHP安装无法让您做得更好。此函数是未来的证明,如果需要,可以更改算法,同时保持与现有哈希的向后兼容性

你应该做的是:

  • 使用带有参数
    PASSWORD\u DEFAULT
    的功能,这允许将来切换算法。看看下面的例子
  • 将散列存储在
    varchar(255)
    类型的数据库字段中,这样将来的算法也可以存储它们的散列
  • 确保您使用的是PHP版本5.3.7或更高版本,这样函数将生成带有标识符的哈希值
    $2y$
    (而不是
    $2a$
  • 例如:

    // 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);
    

    你读过相关的问题吗?答案归结为“使用密码\u散列/密码\u验证”。我的问题不是是否使用它们,而是使用它们时我应该注意的问题。好吧,快速回答:与
    crypt
    函数和
    brcypt
    算法相比,没有陷阱。详细答案:请参见PHP密码的
    安全哈希和salt的答案
    问题(上面的链接)