gpt4 book ai didi

security - 将旧密码转移到新的哈希算法?

转载 作者:行者123 更新时间:2023-12-02 10:33:45 25 4
gpt4 key购买 nike

我正在将站点切换到 Rails。这是一个拥有超过 5 万用户的大型网站。问题是,现有的密码哈希方法极其很弱。我有两个选择:

1) 切换到新算法,为每个人生成随 secret 码,然后通过电子邮件将这些密码发送给他们,并要求立即更改

2) 实现新算法,但使用之前的旧算法,然后对结果进行哈希处理。例如:

密码:abcdef =算法 1=> xj31ndn =算法 2=> $21aafadsada214

任何新密码都需要经过原始算法 (md5),然后对哈希结果进行哈希处理(如果这有意义的话)?这样做有什么坏处吗?

最佳答案

一般情况下不需要重置密码,只需等到用户下次登录即可。

  1. 首先尝试使用新算法验证输入的密码。新密码和已转换的密码将不会花费更长的时间进行验证。
  2. 如果不匹配,则与旧的哈希算法进行比较。
  3. 如果旧的哈希值匹配,那么您就可以计算并存储新的哈希值,因为您当时就知道密码。

每个密码存储系统都必须可以选择切换到更好的哈希算法,您的问题不是一次性迁移问题。像 BCrypt 这样的好的密码哈希算法有一个成本因素,您必须不时地增加这个成本因素(因为更快的硬件),然后您需要与迁移所需的完全相同的过程。

如果你的第一个算法真的很弱,并且你想立即提供更多保护,那么对旧哈希值进行哈希处理的选项 2 是一件好事。在这种情况下,您可以计算双哈希并用新的双哈希替换数据库中的旧哈希。

$newHashToStoreInTheDb = new_hash($oldHashFromDb)

您还应该标记此密码哈希 ( see why ),以便您可以将其识别为双哈希。这可以在单独的数据库字段中完成,也可以包含您自己的签名。现代密码哈希函数还包括算法的签名,以便它们可以升级到更新的算法,并且仍然可以验证旧的哈希值。该示例显示了 BCrypt 哈希的签名:

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
___
|
signature of hash-algorithm = 2y = BCrypt

验证将像这样运行:

  1. 判断是否是双重哈希。
  2. 如果是新的哈希值,请调用新的哈希函数来验证输入的密码,然后就完成了。
  3. 如果是双哈希,则与双哈希算法new_hash(old_hash($password))进行比较。
  4. 如果双哈希值匹配,您就可以计算并存储新的哈希值。

关于security - 将旧密码转移到新的哈希算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com