【问题标题】:how to recover the string used to generate the given hash?如何恢复用于生成给定哈希的字符串?
【发布时间】:2020-05-16 16:05:20
【问题描述】:

代码:

import hashlib
print(hashlib.sha256("user,12345,999999".encode()).hexdigest())

用于生成哈希:

c50603be4fedef7a260ef9181a605c27d44fe0f37b3a8c7e8dbe63b9515b8e96

但是,我不确定如何从该哈希中恢复密码?我知道它首先转换为字节,然后返回为十六进制。但是,如果有人给了我一个随机哈希,我必须从中找到字符串,我不知道如何回溯。

【问题讨论】:

  • 您正在使用sha256,您不会从哈希中获取明文字符串。 How much would it cost to crack sha-256
  • @PacketLoss 但如果有人要我使用哈希找到字符串的“12345”部分,我将如何恢复?
  • 没有物理方法可以破坏 256 位哈希。您不会仅从哈希中恢复任何字符串的任何部分。你可以说,尝试散列字符串,直到匹配到散列,但你不能将散列反转为字符串。

标签: python string hash passwords sha256


【解决方案1】:

散列的意义在于它只有一种方式。你不能“撤消”它。

如果你有一个散列并且你想找到被散列的字符串,你有 3 个选项:

  1. 找到一台超级计算机并发动攻击。宇宙结束后可能需要几天、几十年、几千年或完成(取决于哈希函数)。
  2. 随机猜测字符串,对它们进行哈希处理,看看它们是否匹配。
  3. 在彩虹表中查找:https://crackstation.net/

【讨论】:

  • 我已经尝试过选项 3,因为它是 sha256,但是什么也没找到。如果我对不同的字符串使用相同的过程并且必须找到具有给定哈希的字符串部分,那根本不可能吗?甚至没有算法?
  • 如果 Crackstation 没有它,他们就没有它。散列函数的算法是专门设计的,所以你不能创建一个倒退的算法。
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
相关资源
最近更新 更多