我是一位相当新的开发人员,我想确保我在安全方面做出正确的决定。根据我的研究,似乎我应该为我的密码使用salted bcrypt哈希算法。根据PHP 7的文档,password_hash功能就是这样做的。我甚至不需要想办法制作自己的盐,因为salting包含在password_hash中。这似乎是PHP 7密码哈希的一个简单正确答案。但是,简单的正确答案通常是错误的。 PHP的默认密码哈希库存在哪些缺陷?
关于PHP密码哈希的大多数答案都得出结论我应该使用password_hash / password_verify。但是,我的问题更接近于我应该如何使用它们?'或者'使用它们时应该注意什么?'
答案 0 :(得分:1)
似乎您正在寻找确认,所以是的password_hash()
功能绝对是可行的方法,您可以通过正常的PHP安装做得更好。此功能是面向未来的,如果有必要,可以更改算法,同时保持与现有哈希的向后兼容性。
你应该做的是:
PASSWORD_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);