我有一个使用 MD5 加盐和散列的旧密码数据库。我想更新系统以使数据更安全。
第一个选项是在用户登录并在一段时间后停用旧用户时将用户转换到新的哈希方案(Salt + Scrypt 或 PBKDF2 HMACSHA256),因此他们必须使用密码恢复功能,该功能会自动更新他们的哈希值。
另一个可以让我立即升级每个人的选项是采用现有的 MD5 哈希值,为每个哈希值添加一个新的随机盐值,然后使用新的哈希方案(Salt + Scrypt 或 PBKDF2 HMACSHA256)对结果进行哈希处理并存储该值到数据库并删除旧值。
然后当用户登录时,我必须先应用旧方法,然后再应用新方法。我更喜欢第二个选项,因为它允许我迟早从数据库中删除所有旧的不安全哈希。
对现有哈希进行加盐和重新哈希是否安全?MD5 是否如此损坏以至于我可以运行一个脚本来对密码进行去散列并使用新方案对其进行重新散列?
或者也许最好的解决方案是结合这两种选择?这样我就不必在数据库中保留现有的 MD5 哈希值,并且可以在一段时间内将用户迁移到新系统?