我有一个旧应用程序,它的用户密码以 MD5 哈希值存储在数据库中。我想用 SHA-2 系列中的内容替换它。
我想到了两种可能的方法来实现这一目标,但两种方法看起来都相当笨拙。
1) 添加 bool “标志”字段。此后用户第一次进行身份验证时,将 MD5 密码哈希替换为 SHA 密码哈希,并设置标志。然后我可以检查该标志以查看密码哈希是否已转换。
2) 添加第二个密码字段来存储 SHA 哈希值。此后用户第一次进行身份验证时,使用 SHA 对密码进行哈希处理并将其存储在新字段中(可能同时删除其 MD5 哈希值)。然后我可以检查SHA字段是否有值;这基本上成为我的旗帜。
无论哪种情况,对于不经常登录的用户来说,MD5 身份验证都必须保留一段时间。任何不再活跃的用户将永远不会切换到 SHA。
有更好的方法吗?
最佳答案
本质上是一样的,但可能比添加额外的字段更优雅:在 Django 中的默认身份验证框架中,密码哈希值存储为如下构造的字符串:
hashtype$salt$hash
哈希类型是 sha1 或 md5,盐是一个随机字符串,用于对原始密码加盐,最后是哈希本身。示例值:
sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4
关于passwords - 如何将密码哈希从 MD5 转换为 SHA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1381448/