美文网首页
【学懂区块链】06:哈希不是人

【学懂区块链】06:哈希不是人

作者: 修远来了 | 来源:发表于2018-05-14 12:17 被阅读0次

作者微信公号:辉光日新i ( hgrx2017 );

已进行数字签名版权保护;

转载请保留以上声明。


小明对刚刚偶遇的女职员一见钟情,却懊恼自己没敢问对方名字。

同去的小强说:别担心,我记住了她的工号。

小明心领神会:”太好了,你是我亲哥!“

你看,相比没有排序的混乱,编号起到了准确定位、不会重号的作用,方便查找和管理。

给公司人员编号还好说,要是给网络上沙粒一样多的文件排序又该怎么编号呢?

幸好,哈希可以解决这个问题。

小强问:哈希?听起来像男人的名字,篮球明星哈登就是男的。

小明说:不不不,哈希应该是女人,歌唱家哈辉就是位女士!

我回答:哈希不是人。

啊?……

哈希算法是什么

没错,哈希是一种算法。

它可以将任意长度文件映射为固定长度的消息摘要,即哈希值。

了解一点计算机的朋友知道,计算机所处理的信息其实是由0和1组成的电子信号,也就是大家所说的比特(bit)。

比如这张美女图片,在计算机的比特世界里是这个样子:

010101110101101010101010010101010101010101……

没敢写完,不然让你划拉很久的屏幕一定会抓狂的。如此多的由0和1组成的字符串就是美女图片在比特世界里的表现方式,这串长长的字符被称为“二进制文件“。

哈希算法,相当于给二进制文件拍了个X光照片(不带美颜哦),就得到了它的哈希值:

711472522371865af00626cf1f44d2c61221e947

经过哈希算法得到的哈希值,可作为文件在网络里的编号。或者说,哈希值是一个文件的指纹。

至于哈希算法是怎样将二进制文件变出哈希值的,我们不必去深究。只管把它当作是一台X光机,它能将任何文件拍出一张X光片,片子上的编号就是这个文件的哈希值。

对了,X光片上的编号长度是一致的。就是说,哈希值长度是固定的。

哈希算法有这么神奇的功能,所以它也被用在了很多地方。

哈希值的特点

首先相同文件的哈希值是一致的

如果一个文件被复制了,那它们的哈希值就是一样的;相反,如果两个或以上的文件哈希值相同,就说明它们是同一文件。

这就像两个相同的人拍出来X光片也是一样的,两个不同的人哪怕只是其中一个有点驼背,拍出来的X光片也会不一样的。

其次,源文件改之毫厘,哈希值谬之千里

源文件哪怕只被修改那么一丁点儿,它的哈希值也会变得乱七八糟。这是一个特别有价值的特性,人们可以通过哈希值来判断文件是否被篡改。

第三,无法逆向推导

哈希算法不但可以为文件编号,还有为文件加密的功能。就是说无法通过哈希值推算出文件本来的样子,或者说你无法通过看X光片知道这个人长什么模样。

第四,速度很快

对于哈希算法来说,不管是高达几十G的高清电影还是小到几K的文本文件,都可以在瞬间计算出哈希值。就如X光机扫描一个物体只用一秒钟不到而已。

快速为文件计算出不重复的编号,且无法通过编号反推出原文件。这是哈希算法的最大价值。

什么是哈希碰撞

虽然哈希算法可以为不同的文件计算出不同的哈希值,但也有可能会出现重号的时候。就好像明明是两个不同的人,却生生拍出了一样的X光片。现实中这样的情况是极难遇到的,但在理论上这种概率是存在的,只不过重号的概率几乎等于0。

这种几乎不可能的概率就好像:天上飞翔的鸽子排成了I LOVE YOU 的图案、美国总统携夫人来为你表演二人转、每天都被同一粒沙子迷到眼睛……

那假如我就是碰到了呢?好的,这种情况就会被称作哈希碰撞。

好的哈希算法发生碰撞的概率更小

哈希算法的种类

我明白,即便发生哈希碰撞的概率很小,你也还是想更小点。

其实把哈希值的位数再加长一些就可以了,但过长的哈希值会变得不够实用----医生也不希望每天举着1平米的X光片诊断。

所以你会发现,刚才美女图片的哈希值是由数字和字母组成的,目的是缩短哈希值长度,方便实际中的应用。

对于小型资料库,使用CRC-32短哈希算法就可以。它能给出数十亿种不同的编号,更方便的是它的哈希值(即编号长度)是固定的8位数。

再大一些的数据库,拿MD5算法过来用吧。虽然它的哈希值比CRC-32长一些,但也因此进一步降低了哈希碰撞的概率,让你对文件有更好的管理。

我们正在学习的比特币系统,使用的是SHA256算法。它的哈希值更长一些,带来的好处是逆推的难度也更大:即使我们人类目前所有的计算能力加在一起,也无法计算出来。

这几种哈希算法没有绝对得好坏之分,它们就像长剑、弯刀和匕首,适合你应用场景的就是最好的。

哈希算法的价值

在计算机的比特世界里,哈希算法就像不可或缺的螺丝钉,与其他技术一同组装起庞大而精密的机器,使信息技术变得更加强大。

哈希算法使得人们更加快捷安全地管理信息,从而提高生产效率

看到这里,是不是也想把自己的文件哈希一下呢?

OK,你也可以的。

1、为文件哈希:

http://www.atool.org/file_hash.php

2、为字符哈希:

http://www.kjson.com/encrypt/hash/?fm=map

未完,待续……


参考资料:汤强《如何给你的文件设定独一无二的编号?》

相关文章

网友评论

      本文标题:【学懂区块链】06:哈希不是人

      本文链接:https://www.haomeiwen.com/subject/qcbddftx.html