在之前的文章中,我们聊了SHA-1和SHA-2,以及MD5,它们都属于安全散列算法,也就是我们经常听到的“哈希算法”,那什么叫做哈希算法呢?我们今天就来了解一下。
哈希算法
哈希算法并不是一种算法,也称散列、杂凑算法,英文名为Hash,它的原理就是将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是Hash值(也叫哈希值、散列值)。
优秀的哈希算法有什么要求?
- 从Hash值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);
- 对输入数据非常敏感,哪怕原始数据只修改了一个数据,最后得到的Hash值也大不相同;
- 散列冲突的概率要很小,对于不同的原始数据,Hash值相同的概率非常小;
- 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出Hash值。
哈希算法的应用
- 安全加密
说到哈希算法的应用,最先想到的应该就是安全加密。最常用于加密的哈希算法是MD5和SHA。而对用于加密的哈希算法来说,保证“从Hash值不能反向推导出原始数据”和“散列冲突的概率要很小”是非常关键的。
- 密码储存
密码作为用户的非常隐私的信息,最简单的保护措施就是对密码进行hash加密。在客户端对用户输入的密码进行hash运算,然后在服务端的数据库中保存用户密码的hash值。也正因没有明文储存密码,“找回原密码”这个功能越来越少见。
- 唯一标识
我们在校验两个文件是否一样的时候,可以从大文件中按照特定的规则取一些二进制数据,利用哈希算法得出哈希值作为该文件的唯一标志。如此,相同的文件必定具有相同的哈希值,也就是相同的唯一标志;不同的文件在很大概率上是具有不同的哈希值唯一标志的。
- 数据校验
相信每个人都使用过BT下载软件吧,那么要判断下载的文件是否完整,就需要用到哈希算法了,这里利用了哈希算法“对输入数据非常敏感”的特点。当文件块下载完成之后,可以通过相同的哈希算法,对下载好的文件块逐一求哈希值,然后跟种子文件中保存的哈希值比对。如果不同,就说明这个文件不完整或者被篡改了。
哈希算法在日常生活中应用甚广,远远不止上述这些,像数字签名、数字证书、分布式存储、数据分片、负载均衡等都有哈希算法的影子。
免责声明:素材源于网络,如有侵权,请联系删稿。