首页 > 解决方案 > 查找 hash() 以 0000 开头的字符串

问题描述

我的教授给我一个任务,不幸的是我真的很困惑。

任务:

找到一个字符串 D1,其中 hash(D1) 包含 4 个等于 0 的第一个字节。所以它应该看起来像“0000 .....”

据我所知,我们不能仅仅解密一个哈希值,并且一个一个地检查它们是一种毫无意义的工作。

标签: hashpython

解决方案


我的教授有一个任务...

找到一个字符串 D1,其中 hash(D1) 包含 4 个等于 0 的第一个字节。所以它应该看起来像“0000 .....”

据我所知,我们不能仅仅解密一个哈希值,并且一个一个地检查它们是一种毫无意义的工作。

在这种情况下,这项工作似乎并不是真的“毫无意义”。相反,您正在做这项工作,因为您的教授要求您这样做。

一些评论者提到您可以将比特币区块链视为哈希的来源,但这只有在您感兴趣的哈希与比特币使用的哈希相同时才有效(双 SHA256!)

一般来说,解决这个问题的最简单方法就是暴力破解它:

伪代码 a la python

for x in range(10*2**32):  # Any number bigger than about 4 billion should work
    x_str = str(x)  # Any old method to generate some bytes to hash should work
    x_bytes = x_str.encode('utf-8')
    hash_bytes = hash(x_bytes)  # assuming hash() returns bytes 
    if hash_bytes[0:4] == b'\x00\x00\x00\x00':
        print("Found string: {}".format(x_str))
        break

推荐阅读