Hash函数又称为散列函数。是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出的值称为散列值或者消息摘要。
其实就是你随便给我一个输入,我返回你一个固定长度的消息摘要。
常见Hash函数的实现:
-
1.MD5
是一种被广泛使用的密码散列函数。MD5可以产生出一个128位(16个字节)的散列值。
特点:
压缩性:任意长度的数据,运算得出的MD5值长度都是固定的(128位)。
容易计算:很容易从原数据计算出对应的MD5值。
抗修改性:对原始数据的改动,得到的MD5值有很大的区别。
强抗碰撞:已知原始数据和其MD5值,想找到一个具有相同MD5值的数据非常困难。 -
SHA1
SHA1也是哈希算法的一种,只要理解了MD5算法,SHA1也很快的就能理解。
SHA1算法得到的SHA1值长度为20个字节(160位)。
哈希函数的一些特性
- 相同的输入一定会得到相同的输出。这就说明哈希函数中不存在随机的行为。
- 因为输入域是无穷的,而输出域是有穷的,所以不同的输入,可能会有相同的输出。这个就是哈希碰撞。碰撞的概率非常低。非常非常低,比你买彩票中500万都低。
- 离散性:例如输入域为0~9999这一万个数,输出域分为三部分1,2,3,输出集合中的数几乎是均匀分布的。
离散性作用:打破输入规律–很相似的东西经过哈希函数后千差万别。
均匀性越好,离散性越好,哈希函数越优良。 - 如果哈希函数的返回值在S域上均匀分布,那么经过S%m,哈希函数在(0,m-1)域上也均匀分布。