【问题标题】:bcrypt salt for a password and costbcrypt salt 用于密码和成本
【发布时间】:2014-02-28 01:18:08
【问题描述】:

我刚刚阅读了有关 bcrypt 的内容以及它的真正优势。据我了解,我使用盐和其他方法(如 MD5、SHA1、SHA2 等)来防止彩虹攻击。 bcrypt 需要一种盐来告诉它成本。

据此我有几个问题:

  1. 我需要在我的数据库中为每个密码存储一个盐吗?或者我可以为每个密码使用相同的盐?

  2. 成本如何运作?成本 15 和成本 20 有什么区别?我知道它与迭代有关,但每次迭代它到底做了什么?

【问题讨论】:

标签: php security hash bcrypt


【解决方案1】:

PHP 的文档对“salt”这个表述有点误导,实际上crypt() 函数需要散列参数,而salt 只是这个参数的一部分。

好消息是,所有参数都将包含在生成的 60 个字符的哈希字符串中,因此您不需要单独存储它们,只需存储字符串就可以了。成本因子提高到 2 次方,也就是说,成本因子每增加 1 倍,计算时间就会增加一倍。

PHP 现在有一个函数password_hash() 为您处理所有困难的部分。使用这个函数代替 crypt,它会生成一个安全的随机盐。

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

我写了一篇关于这个主题的教程,如果你有兴趣可以看看here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2019-05-22
    • 2012-10-05
    • 2018-07-29
    • 2023-03-06
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多