哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。比如JAVA字符串的hashCode()就是哈希算法,输出是固定的4字节(32位二进制数)int整数,以16进制(一位数表示为4位二进制)表示,因此表达为类似0x7a9d88e8这种八位数的形式,即32除以4等于8。当然不是所有输出都会带0x前缀,但是对我们看到输出的字符串有 e、a、f 等字母就应该自然而然地想到是十六进制。
最简单的哈希算法就是取模。
哈希算法的目的就是为了验证原始数据是否被篡改。
不如在一些官网下载软件包,对应版本会有唯一一个哈希值,如下图:
比如加密用户密码。
不要在数据库明文保存用户密码,防止内部人员或者黑客窃取。应该保存密码的hash值,同时为了避免彩虹库的碰撞,还应该给每个用户密码加不同的盐(防止密码相同用户因为一个用户密码被破解而同时遭殃),即保存 hash(password +salt)计算后的值。
比如 HTTPS、CA 证书
也可以归为安全领域,但是值得单独拿出来讲述。
这里就可以展开脑洞啦。
比如涉及到版权问题,比如图片。根据文件内容的哈希值判断是否是相同文件,修改文件名称和时间没有用,即使该文件在不同计算机间拷贝,哈希值的计算是针对文件流,即文件内容。
比如上传大文件到百度网盘时,感觉是秒传。
比如上传大文件到服务端的断点续传(避免重复上传)。