第二十一节-哈希算法(上)

什么是哈希算法

将任意长度的二进制值串映射成固定长度的二进制值串,这个映射规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。

哈希算法的几点要求

  • 单向性

从哈希值不能推出原始数据

  • 雪崩性

对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也有接近一半的位数发生变化

  • 抗弱碰撞性

散列冲突的概率非常小,之所以不能说是完全不冲突,鸽巢原理解释了这一点。

  • 高效性

能快速计算出输入数据的哈希值

应用

一、安全加密

对于加密的哈希算法来说,有两点格外重要:

  • 不可逆推性

不过不必追求绝对不可逆推,只要达到足够的不可逆推要求即可。

  • 抗碰撞性

这个要尽可能追求,只要几率极小即可,无法做到绝对,毕竟上面说过了鸽巢原理说明了不存在绝对的两个不同输入不产生相同的输出。

二、唯一标识

比如根据哈希值查找库中是否已经有了相同的图片、视频。git 中也使用了 SHA 来标识文件版本和追踪文件。

三、数据校验

CRC 算法其实就是一种保证数据安全哈希数据校验。。。实际中,我们也可以在 BT 协议中使用哈希算法对每块数据进行数据校验,只保存正确数据块。

四、散列函数

作为哈希表的散列函数,它直接决定了散列冲突的概率和散列表的性能。

相对于哈希函数的其他应用,散列函数的要求比较低,即使出现个别散列冲突,只要不太严重,也是可以开放寻址法和链表法解决的。

散列函数更关注一组数据能否均匀分布在各个槽中和计算哈希值的效率。

你可能感兴趣的:(第二十一节-哈希算法(上))