<p>在<code>00.000000</code>和<code>99.999999</code>之间生成所有可能的坐标非常简单:</p>
<pre><code>from itertools import product
import hashlib
digits = '0123456789'
for combo in product(digits, repeat=16):
coords = '{}.{} {}.{}'.format(
''.join(combo[:2]), ''.join(combo[2:8]),
''.join(combo[8:10]), ''.join(combo[10:]))
hash = hashlib.sha256(coords).hexdigest()
if hash == '3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e':
print coords
break
</code></pre>
<p>这将强制所有10*16(一个大数字)的组合。坐下来放松,这需要一段时间。</p>
<p>我们说的“一段时间”,其实是指在你的有生之年,或者其他人的生命中。只要遍历由<code>product()</code>产生的所有可能的组合就需要花费大量的时间,因为每个要尝试添加的数字都会将所需时间增加10倍:</p>
<pre><code>>>> from collections import deque
>>> from itertools import product
>>> from timeit import timeit
>>> digits = '0123456789'
>>> timeit(lambda: deque(product(digits, repeat=8), 0), number=5)
3.014396679995116
>>> timeit(lambda: deque(product(digits, repeat=9), 0), number=5)
30.99540744899423
</code></pre>
<p>如果生成8位数字的所有可能组合需要0.8秒(4s除以5次重复),9位数字需要8秒,你可以推断出10位数字几乎需要1.5分钟,等等。生成16位数字的所有可能组合需要100万(10**6)倍于10位数字的时间,所以963天或者3年后运行一个循环。您可以将此任务拆分为大量计算机上的2000个不同进程,这些计算机总共有足够的内核来并行运行这些进程,从而将此时间减少到12小时以下。</p>
<p>那么循环体本身每百万次迭代大约需要2.4秒:</p>
<pre><code>>>> from random import choice
>>> combo = tuple(choice(digits) for _ in range(16)) # random combination for testing
>>> timeit("""\
... coords = '{}.{} {}.{}'.format(
... ''.join(combo[:2]), ''.join(combo[2:8]),
... ''.join(combo[8:10]), ''.join(combo[10:]))
... hash = hashlib.sha256(coords).hexdigest()
... if hash == '3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e': pass
... """, 'from __main__ import combo; import hashlib')
2.3429908752441406
</code></pre>
<p>但你的工作量比那多了10**10(10000万)倍,总共大约有743<strong>年的计算工作量。即使能够运行2万个并行进程也不能将其减少到一个合理的数字(这仍然是大约13.5年的工作)。</p>
<p>Python还不够快。使用gpu应该可以到达<a href="https://www.tweaktown.com/articles/8229/ethereum-mining-1gh-40-gpus-5000-per-month/index.html" rel="nofollow noreferrer">500 million hashes per second (0.5 Gigahash / s)</a>,此时您可以运行上述暴力操作,并在大约230天内在这样的系统上找到解决方案。当然是要付出代价的,因为这样的钻井平台一个月的运行费用大约在3000-4000美元之间!但有了足够的专用硬件,你当然可以“破解”在“人道”时间表的杂凑。</p>