Bootstrap

白话讲Hash


hashcode 每个人都不陌生,我从接触计算机就开始听说这个名词,但是对其理解,其实一直限于知道有这个东西,大体上是干嘛的,从来没有细致的去思考过它存在的意义。直到研究一个加密 IM 的项目,去思考和学习加密相关的知识,对 hashcode 才慢慢熟悉起来,对其相关的知识也有了一些了解。本篇主要讲自己在接触 hashcode 过程中的一些感悟和思考。秉承习惯,用白话来描述,尽量避免专业词汇。

Hash 是什么(不同输入,定长输出)

先把 hash 作为一个函数来说:hash 函数是对输入数据,输出一个定长的编号,就是输入的可能是一个视频文件,可能是图片,可能是 text 文本,也可能是一个字母 a,b,c 。不管输入是什么,输入的根本都是二进制的 0和1 的一个序列。无论输入的 0 和1 的序列是怎样的顺序,多长,经过 hash 函数计算都会输出一个定长的编号。而这个编号就称为 hashcode。
我的理解是:互联网庞杂的数据需要管理,所以需要对其编号,每个文件都有一串定长的数与之对应起来。相当于给每个人一个身份证号码。既然是类似身份证号码,所以要保证不能有两个人拥有同一个身份证号码吧。所以 hash 函数要保证两个不同的输入,输出的编号也是不一样的。即不同的输入,经过 hash 函数计算产生不同的 hashcode。(由于工程实现一一对应比较困难,可能存在不同输入,产生相同的 hashcode ,这种现象叫碰撞,好的 hash 函数应该把碰撞概率尽可能的降低)

;