【问题标题】:How to convert md5 32 bytes hash to corresponding sha256 in python [closed]如何在python中将md5 32字节哈希转换为相应的sha256 [关闭]
【发布时间】:2019-02-22 13:40:06
【问题描述】:

我有一个包含 md5 哈希的数据库,我想将它们转换为另一种类型的哈希,以便用户可以登录到新网站。

我正在使用werkzeug.security 库来生成哈希。

我有什么办法吗??

【问题讨论】:

  • 没有办法,md5和sha256都是单向哈希。让您的用户更改密码。

标签: python werkzeug


【解决方案1】:

MD5 是一个单向哈希函数,没有办法反转它,所以它可以重新作为另一种类型的哈希。

解决这个问题的常用方法是拦截登录过程,获取明文密码,并为新系统单独编码。确保您使用的是现代密码哈希算法,例如 bcryptscrypt,而不是 SHA256。

【讨论】:

  • 所以唯一的办法就是让他们改密码!
  • 不,他们不必更改它们 - 只要您可以保留 MD5 哈希值,您可以将其用于初始登录,然后在验证 MD5 哈希值后创建 SHA256 哈希值并从数据库中删除旧的 MD5 值。
  • 是的,我认为这是处理情景的最佳方式,感谢您的关注 :)
  • @swordfish 请使用比 SHA256 更安全的东西
  • 不,werkzeug defaults 到 PBKDF2。显然工作系数为 8。
【解决方案2】:

没有。哈希是不可逆的,所以你不能直接这样做。

解决这个问题的方法是,当老用户登录时,根据 md5 哈希验证他们的密码,如果匹配,则从纯文本密码创建 SHA256 哈希,在数据库中设置新的 SHA256 哈希(作为单独的字段或在哈希本身前面使用哈希类型标识符),然后删除 MD5 哈希值。

一段时间后(例如一年),您删除了所有现有的 MD5 哈希值,并让试图在没有有效哈希值的情况下登录的人通过现有方式重置其密码,然后仅填充 SHA256 字段。

【讨论】:

  • 击败我(提交相同答案后 10 秒)。这是执行转换的唯一合理方法。您可以自己转换的唯一哈希值是非常弱的密码(无论使用哪种哈希算法,密码都会很弱),并且故意攻击用户的密码如果成功则不告诉他们密码很弱 i> 是非常糟糕的做法。
  • 如果您要更改所有哈希值,请考虑使用慢速哈希函数(用于safety)。
  • @Hyarus 同意。
猜你喜欢
  • 2017-08-04
  • 2022-08-11
  • 2011-01-27
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2021-11-19
  • 2011-11-15
  • 2017-01-24
相关资源
最近更新 更多