是否有任何理由不使用PHP';默认密码哈希库?
我是一个相当新的开发人员,我想确保我在安全方面做出了正确的决策。根据我的研究,似乎我应该对我的密码使用salt-bcrypt散列算法。根据PHP7的文档,password_hash功能正是这样做的。我甚至不用想办法自己做盐,因为盐已经包含在密码杂凑中了。这似乎是PHP7密码哈希的简单正确答案。然而,简单正确的答案往往是错误的。PHP的默认密码哈希库有哪些缺陷是否有任何理由不使用PHP';默认密码哈希库?,php,hash,passwords,Php,Hash,Passwords,我是一个相当新的开发人员,我想确保我在安全方面做出了正确的决策。根据我的研究,似乎我应该对我的密码使用salt-bcrypt散列算法。根据PHP7的文档,password_hash功能正是这样做的。我甚至不用想办法自己做盐,因为盐已经包含在密码杂凑中了。这似乎是PHP7密码哈希的简单正确答案。然而,简单正确的答案往往是错误的。PHP的默认密码哈希库有哪些缺陷 关于PHP密码哈希的大多数答案都认为我应该使用password\u hash/password\u verify。然而,我的问题更接近于“
关于PHP密码哈希的大多数答案都认为我应该使用password\u hash/password\u verify。然而,我的问题更接近于“我应该如何使用它们?”或“使用它们时应该注意什么?”似乎您正在寻求确认,所以是的,
密码\u hash()
函数肯定是一条路要走,普通的PHP安装无法让您做得更好。此函数是未来的证明,如果需要,可以更改算法,同时保持与现有哈希的向后兼容性
你应该做的是:
PASSWORD\u DEFAULT
的功能,这允许将来切换算法。看看下面的例子varchar(255)
类型的数据库字段中,这样将来的算法也可以存储它们的散列$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的答案问题(上面的链接)