hash算法
1、介绍
hash算法是把任意长度的输入处理为固定长度的输出,该输出称为散列值或者hash值。
1.1 特点
多对一映射:由于输入有无限种可能,而输出有限,则必然是多对一
不可逆转:基于多对一映射,所以无法基于输出获取输入
1.2 作用
(1)数据校验
比较两个明文的hash值,如果相同,一般认为其明文也相同。如果不同,则必然明文不同。
可以验证明文是否一致,数据的完整性,以及数据防篡改。
(2)负载均衡
优秀的hash算法,会尽可能将输入平均映射到各个输出。
对于比较,或者按序查找操作,可以极大的提高效率。用于改良相关算法,尤其是数据库和大数据场景。
2、性能评价
优秀的hash算法
(1)无法逆推
一般来说,hash值无法推算其明文
(2)输入输出不相关
微小变化,呈现完全不同的hash值
(3)高效计算hash
(4)映射概率平均
3、hash碰撞
3.1 链地址法
3.2 开放地址法
4、hash算法
md4、md5、sha-1
5、hash函数
(1)直接寻址法
(2)数字分析法
(3)平方取中法
(4)折叠法
(5)随机数法
(6)除留余数法
6、注意
(1)对于token或者登录凭证cookie,不建议使用hash,或者使用hash同时应该增加其它字段,比如用户名。
因为hash是可能重复的,会造成越权
(2)hash并不严格保密
比如将常用的账号、密码等其它数据进行hash转换,再与目标hash值比较,最后逐一测试对应的明文值