【问题标题】:understanding SHA 256了解 SHA 256
【发布时间】:2021-01-22 18:03:12
【问题描述】:
import hashlib
previous_proof = 0
new_proof = 0
check_proof = False

while check_proof is False:
  hash_operation = hashlib.sha256(str(new_proof**2 - previous_proof**2).encode()).hexdigest()
  if hash_operation[:4] == '0000':
      check_proof = True
  else:
    new_proof+=1
print(hash_operation)
print(   new_proof)

我制作了这个脚本,用于在 sha256 中查找以“0000”开头的字符串。 谁能解释我为什么如果我输入 '000000' 而不是 '0000' 需要更多时间才能找到字符串? 它应该花费更少的时间,因为我一开始有更多的零,对吧?

【问题讨论】:

  • 掷骰子直到连续获得 3 个六点可能需要一段时间。掷骰子直到连续获得 6 个六点通常需要更长的时间。

标签: python hash sha256


【解决方案1】:

与“0000”相比,以“000000”开头的散列要少得多,因为这是允许开始的限制

使用/假设均匀分布,即减少 256 (2^8) 倍:因此采用 ~256 倍的时间似乎是合理的

考虑到每个 '0000' 4 字符开头也有 '000000'-'0000FF' 6 字符开头,其中只有 1 ('00') 超出 256 ('00'-'FF 的范围') 位置 5 和 6 中的字符匹配的可能性。

              Matches 4?   Matches 6?
0000 00       Yes          Yes
0000 01       Yes          No
0000 10       Yes          No
0000 11       Yes          No
(many more)   Yes          No

【讨论】:

  • 所以计算以'0000'开始的哈希的时间等于计算以'0000'结束的哈希的时间,对吧?
  • @Newdude 任何 '0000' 的出现通常在任何位置(开始、返回、中间)都应该同样可能。在任何给定位置,预计每 65k (2^16) 个哈希中大约有 1 个。
  • @Newdude 所以每一代 SHA256 都有 ~61/65k (~0.093%) 的机会在字符串中任何地方出现“0000”。
猜你喜欢
  • 2023-03-18
  • 2012-08-09
  • 1970-01-01
  • 2013-06-03
  • 2014-08-19
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多