手记

比特币算法之哈希

本文由EOSUnion(eos.ren)优质内容计划赞助


我们在平时使用微信、QQ、邮件等工具发送一个文件时,会遇到这样的情况,同样的一个文件,在发送的过程中,有时候会很快,几乎一秒钟;有时候会很慢,需要耐心等待文件一点点的上传才能成功。其实背后支撑这种技术的就是我们常听的 哈希算法,也称 散列算法或数据摘要。

当你第一次发一个新的文件时,就会需要等待它慢慢的上传,这是因为你所使用的平台数据库中没有这份文件;当你上传成功后,该平台服务器上便为你这份文件添加了一个索引,即该文件的编码,当你再次发送这个文件的时候,你发送的只是这个文件的索引(编码),接收方在收到这个文件的索引后,便可直接在该平台的服务器上访问此文件。这个索引,就是这个文件的 哈希值

那系统是如何知道我每次操作的是不是同一个文件呢?

先普及几个概念
二进制:二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
二进制文件:所有保存在计算机中的文件,都以二进制的格式保存,即把每一个文件解析成一个个 1 和 2 组成的二进制文件。这样的好处是节省空间、方便快捷、不容易丢失数据。

哈希算法会通过提前编写好的规则,来将每一个较大的二进制文件映射成一个固定长度的二进制字符串,这个字符串就是该文件的哈希值。只要你用同一种哈希算法对同一个文件进行哈希计算,不管计算多少次,得到的结果都是一样的。就像每个人的指纹、虹膜、DNA 都各不相同。

如果你哪怕改动这个文件内的一个字母,再次哈希计算出来的结果就会对应改变。同时如果你想找到不同文件的两个完全相同的哈希值,而且这个哈希算法还比较严谨,理论上是不可能的。

所以文件的哈希值可以用来检验这个文件是否被更改过,可以用来索引你每次转发的是不是同一个文件。

应用

  • 在大量转发文件的情况下,这样就能极大的减少流量的浪费,缩短了用户的期望时间,提高效率;

  • 文件在再次传输的过程中,只会传输该文件的哈希值,而不是文件本身,使得在不确定的网络环境中,变得更安全些;

  • 可以给大量的文件加上索引,当需要的时候,能以最快的速度在文件堆中,准确的查找到对应的文件;

  • 比特币使用的哈希算法是SHA256,SHA是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的,主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。256 意味着每个哈希值都是 256 位!



0人推荐
随时随地看视频
慕课网APP