Hash算法给你的珍藏文件烙上独一无二的DNA

Java技术 潘老师 4年前 (2020-09-28) 1755 ℃ (0) 扫码查看

每个人都有个名字,比如张三、李四、王五,再不济也有个阿猫阿狗的称呼,虽然都有名字,但名字会重复,所以你必须得有身份证,不然你成了传说中的“黑户”,身份证就是能证明“你是谁”的唯一标识。 在互联网里,每个文件也必须有自己的唯一标识,用于文件的自我证明-“我就是我,不一样的烟火!” 而能点燃这场烟火的,正是哈希算法

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,可将任意文件映射为较短的固定长度的字符串(即哈希值)。

计算机世界只认二进制,任意文件都是由“0”和“1”组成的,比如币乎的logo它在电脑中真实面目可能是:

001100010101110000101000001….

得有上万位吧,估计要写到下班才能写完,而将其哈希一下就得到了它的哈希值:e836e7bfcf8a2503524a9291a26c4b18083b91e4

简短而又精悍,如果图片是一个人,那么哈希值就是TA的DNA序列,不同的文件哈希值不同,同一个文件哈希值固定,如果你复制一份,它的哈希值并不会改变,与原件一样。因此,哈希值就是网络世界里文件的DNA编号,如果想给你的文件烙上DNA,就把它哈希一下吧!

一个优秀的哈希算法,具有以下特点:

(1)正向快速:给定明文和 hash 算法,在有限时间和有限资源内能快速计算出 hash 值。

对于一部20G的3D电影与一个5k的文档说明,哈希一下的时间几乎相同。

(2)不可逆向:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。

很容易理解,就是说给你个DNA序列,你根本无法想象出他长什么样,你甚至无法分清他是人还是啥, 因为大猩猩的DNA和人的DNA相似度可达98%。

(3)输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来都有很大不同。

就如同你某天打开支付宝,突然发现账户上的余额小数点向后移了一位,你瞬间从10万的小资变为了百万的富翁。

(4)冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

这个概率小到什么程度呢?额…估计比中双色球大乐透还难吧!可万一真中了呢?那就是撞大运了,我们称之为哈希碰撞,越优秀的哈希算法,哈希碰撞的概率也越低。

目前流行的 Hash 算法包括 MD5、SHA-1 和 SHA-2。

(1)MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。其输出为 128 位。MD4 已证明不够安全。

(2)MD5(RFC 1321)是 Rivest 于1991年对 MD4 的改进版本。它对输入仍以 512 位分组,其输出是 128 位。MD5 比 MD4 复杂,并且计算速度要慢一点,更安全一些。MD5 已被证明不具备”强抗碰撞性”。

(3)SHA (Secure Hash Algorithm)是一个 Hash 函数族,由 NIST(National Institute of Standards and Technology)于 1993 年发布第一个算法。目前知名的 SHA-1 在 1995 年面世,它的输出为长度 160 位的 hash 值,因此抗穷举性更好。SHA-1 设计时基于和 MD4 相同原理,并且模仿了该算法。SHA-1 已被证明不具”强抗碰撞性”。

为了提高安全性,NIST 还设计出了 SHA-224、SHA-256、SHA-384,和 SHA-512 算法(统称为 SHA-2),跟 SHA-1 算法原理类似。SHA-3 相关算法也已被提出。

可以看出,上面这几种流行的算法,它们最重要的一点区别就是”强抗碰撞性”。

(1)哈希算法,就是可将任意二进制文件映射为固定长度字符串一种算法。

(2)哈希算法具有正向快速、不可逆向、输入敏感、避免冲突的特性。

(3)衡量哈希算法的好坏的一个重要因素就是“抗碰撞性”。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/1385.html
喜欢 (5)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】