工作量证明算法(2)

运行这个脚本将产生20个短语的哈希值,这些短语通过在文本最后添加一个数字而有所不同。通过增加数字,我们能够得到不同的哈希,如例8-10所示。

例8-10 SHA256的输出,使用脚本通过迭代一个随机数产生多个哈希值

SHA256的输出,使用脚本通过迭代一个随机数产生多个哈希值

每个短语均产生一个完全不同的输出。它们看起来完全随机,但是你可以在任何计算机上使用Python重新生成完全相同的结果,看到完全一样的哈希值。

在这类场景中,作为变量使用的数字叫作随机数。这个随机数用于改变加密函数的输出,在本例中,它用于改变短语的SHA256指纹。

为了使这个算法具有挑战性,我们任意设置一个目标:找到一个短语,它的十六进制哈希值开始于0。很幸运,这个并不难!例8-10显示,短语“I am Satoshi Nakamoto13”的哈希值“0ebc56d59a34f5082aaef3d66b37a661696c2b618e62432727216ba9531041a5”符合我们的要求。经过13次尝试我们达成了目标,从概率的角度看,如果哈希函数的输出是均匀分布的,我们可以期望,每经过16次哈希计算就可以找到一个以十六进制0开头的结果(十六进制0到F的十六分之一)。用数字的角度看,就是找到一个比0x1000000000000000000000000000000000000000000000000000000000000000小的哈希值。我们把这个阈值叫作目标值(target),我们需要做的就是找到这样一个哈希值,使其数值小于这个目标值。如果缩小目标,要查找小于它的哈希值的任务,将变得更加困难。

868区块链学习网为您整理《工作量证明算法(2)》仅供参考。