阅读时间:2分钟
散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。 -- Wikipedia
一个哈希函数就是一个能将一段数据确定性地映射成一段散列值的函数,确定性是指,无论这个函数执行几次,只要输入是相同的,那么输出也是相同的。比如说下面是有名的哈希函数md5的一个例子:
这个哈希函数将我们输入的字符串 “blockchain” 映射成了 “5510a843bc1b7acb9507a5f71de51b98”这样一串散列值。
通常来说, 哈希函数都是不可逆的,意思是说,要想从一个哈希值反推出一个它的输入是和暴力穷举的难度是相似的。这也是区块链中在很多地方运用了哈希的原因,我们这里举两个例子。
POW (Proof of Work) 共识机制
因为哈希产生的散列值并无规律,要想使得散列值满足一定的条件,只能通过暴力枚举来达成。比如说,如果我想找到一个数X,使得它的散列值的最后4位都为0,其实是一件很难的事情。
事实上,如果你能根据比特币的哈希函数Hashcash找到一个这样的数,而且还是别人都没找到过的,那么恭喜你,你挖得了一个新的区块。另外我们可以看出,如果我们对最后的散列值的要求越多,那么寻找对应的X就更难。
识别下方二维码,关注【原味区块】
持续关注区块链本身
领取专属 10元无门槛券
私享最新 技术干货