作业帮 > 综合 > 作业

什么是哈希算法?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/04 03:38:27
什么是哈希算法?
举个更形象点的例子.
这东西其实就像字典(其实就是).你给出来的字符串是一个单词,他在字典里面所属的条目是A-Z其中一个字母.不管你给的单词有多长,他总属于字典中某一个目录下(也就是首字母.).你现在有两个单词,你不知道他们都是什么,但是你知道一个在“A”里面一个在“E”里面.这样你就知道这俩肯定不是同样的单词.不过由于每个条目下都有一大堆的单词,所以你还是不知道这两个单词具体是什么.
当然也有很大的概率两个单词都在E里面,这种情况叫做一种“碰撞”.两个不同的东西生成了同样的结果.拿到360的例子上来说就是,你开了家网站,起了个特别诡异的名字,用奇虎的哈希算法算出来的结果和某个不良网站一样.那么你的网站就被当不良网站屏蔽掉了.
一个好的哈希算法要保证尽可能的少产生碰撞.还是说你之前查字典的例子.这次你把字典拆了.给里面每个首字母下面又加了26个条目,分别是A-Z,里面装着以这些当结尾的单词.这样你随便挑两个单词是一个坑里出来的概率就小多了.
然后突然你有一天觉醒了.感觉就差俩单词太费劲了.所以你买了本空字典,把天下单词挨个试一遍,终于把所有目录里面都填满了.然后你以后找单词就很方便了.别人给你一个单词首字母是A,你就随便从A里面找个应附上.虽然不知道是不是他说的那个,但至少看起来是一个坑里出来的就过关了.这字典就叫彩虹表.这东西写起来比较耗时.没准你算了二十年发现试过的那些单词首字母全是XYZ,但是人家每次给的都是ETA,那之前的活都白干了.
虽然这种方法得到的不是原始记录,而仅仅是与之具有相同特征的记录.而且有这个特征的记录可能有一大堆.有的时候你碰巧拿到的就是原来的那个,但大多数拿到的都是垃圾.如果你的表很全的话,那很有可能一堆记录里面有个和原来的那条一模一样的.这时候你可以根据别的什么信息猜猜找的是什么.比如你俩正打架,然后找出来他给你的单词是F开头的,那基本上就能猜出来了.
这就是哈希算法.一个好的哈希算法仅仅知道结果的话是极难反算出原始数据来的,特别是有意义的原始数据.