Hash 将密码哈希从md5升级到bcrypt

Hash 将密码哈希从md5升级到bcrypt,hash,passwords,md5,bcrypt,Hash,Passwords,Md5,Bcrypt,以前在这里讨论过,但似乎没有结论 理想情况下,不希望在数据库中维护状态(已升级/未升级)等。因此,我的想法如下: b键入MD5的密码,并使用“用户名+其他内容”作为salt 这个计划有意义吗 另外,一般来说,使用用户名作为salt的一部分是一个好主意吗?我在某个地方读到,在每个散列中添加不同的盐会使它更安全。这是否正确(特别是在bcrypt的上下文中) 当然,切换到更安全的哈希算法是个好主意。有一个函数可用于创建BCrypt哈希: // Hash a new password for stori

以前在这里讨论过,但似乎没有结论

理想情况下,不希望在数据库中维护状态(已升级/未升级)等。因此,我的想法如下:

b键入MD5的密码,并使用“用户名+其他内容”作为salt

  • 这个计划有意义吗
  • 另外,一般来说,使用用户名作为salt的一部分是一个好主意吗?我在某个地方读到,在每个散列中添加不同的盐会使它更安全。这是否正确(特别是在bcrypt的上下文中)
    当然,切换到更安全的哈希算法是个好主意。有一个函数可用于创建BCrypt哈希:

    // 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);
    
    从您的回答中,我猜您使用了一个未加盐的MD5值,所以双哈希可能是一个很好的解决方案。只需将MD5哈希传递给password_hash()函数,它就会自己生成一个安全的salt

    // Migrating the old MD5 hashes to MD5-BCrypt
    $hashToStoreInDb = password_hash($existingMd5Hash, PASSWORD_DEFAULT);
    
    首先进行验证,然后相应地验证密码

    if (checkIfDoubleHash($existingHashFromDb))
    {
      $isPasswordCorrect = password_verify(MD5($password), $existingHashFromDb);
    
      // Update database with pure BCrypt hash
      if ($isPasswordCorrect)
        $hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
    }
    else
    {
      $isPasswordCorrect = password_verify($password, $existingHashFromDb)
    }
    
    存储的散列可以由前导的$或单独的db字段识别,例如,BCrypt散列总是以$字符开头,MD5散列则不是


    salt应该而不是从其他参数中删除,并且每个密码都应该是唯一的。password_hash()函数将处理此问题。由于必须为每种盐构建一个彩虹表,因此攻击者必须为每种密码构建一个彩虹表。有关更多信息,您可以查看我的教程。

    请解释downvoteThis更适合,但在发布之前请查看他们的帮助中心。请查看
    password\u hash()
    @Tim I-did-我想知道password\u hash(MD5'd password+username+“fixed random string”)是个好主意吗?@user3714828
    password\u hash()
    创建自己的salt,因此您不必为用户名操心。这很有用。非常感谢。