正文
Hash,一般翻译做散列、杂凑,或音译为哈希, 是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出, 该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间, 不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash的别称有:哈希、散列、杂凑、信息摘要、数字指纹 等
从别称也可以看出Hash的用途:
密码存储(利用hash的不可逆性)
内容比较(利用hash的唯一性,值比较短),如可以比较两个长字符串、两张图片等是否完全相同
内容标识(利用hash的唯一性,值比较短),比如储存图片特征码、大文件特征码等(避免服务器存储多次相同资源),
信息摘要、数字指纹(利用hash的唯一性,值比较短),如android apk验证
数字签名(先信息摘要,再加盐加密)
常见的hash算法有:md5、sha-1、sha-2、sm3、CityHash等
对比其他hash算法,CityHash具有速度快、碰撞率低、结果位少(32/64/128bit,64bit可用long型表示) 的特点。
参考资料
https://ibaiyang.github.io/blog/php/2018/08/03/PHP-哈希运算消息认证码HMAC.html