-
-
[旧帖]
[原创]神马是哈希
0.00雪花
-
发表于:
2011-3-22 14:52
1866
-
神马是哈希?
HASH即是散列函数。指把任意长度信息通过散列算法变换成固定长度的散列值。
哈希的主要用途:
1.散列表:快速查找数据
2.数据完整性效验。
关于散列表
假设有一个英语字典程序中只要输入一个单词,就会显示对应的解释
比如gelivable 对应 [‘gelivəbl]给力
但是程序是如何从数据中找到相应解释的地址?

在储存的时候总是通过 地址1=hash(gelivable) 这种方式存放对应解释。那么在查找的时候就可以快速找到地址。
散列表的一个小缺陷(也许不能称之为缺陷)
哈希函数总是把
任意长度的信息通过哈希函数生成
固定长度的散列值。也就是说理论上有无限个单词,但是散列值(也就是地址)是有限的。那么势必会存在好几个单词他们的解释存放在一个地址上。
解决办法:在存放解释数据时,对于多对单情况进行标记,当查找时在这几个单词中再进行查找。
哈希函数对散列表的影响
一个好的哈希函数,会尽可能的把单词对应地址均匀分散,尽可能的避免多对单的情况。
2.数据完整性效验。
文件效验

身份效验

这是我的密码的MD5散列值:F91EBD69F93FE3B65B4F5E1EFA772441
MD5的破解(http://www.cmd5.com/)

“本站数据量宇宙第一,实时查询记录超过7.8万亿条,其中95%以上全球独有,共占用80T硬盘,已包含11位及11位以下数字、7-8位小写字母加数字、6位大小写字母加数字等组合、以及大量其它数据(最长达20位)。”
也就是说你的密码如果是11位及11位以下数字、7-8位小写字母加数字、6位大小写字母加数字等组合,那么是相当不安全的。
哈希函数对数据完整性效验的影响。
单向的:知道算法情况无法找到哈希函数的逆函数。也就说如果有y=hash(m),那么无法通过m计算出y。
强抗碰撞的:要找到m1,m2(m1!=m2)满足hash(m1)=hash(m2)是非常困难的。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课