先说答案

  1. 确定性如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。
  2. 散列碰撞(collision)散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。
  3. 不可逆性一个哈希值对应无数个明文,理论上你并不知道哪个是。

“船长,如果一样东西你知道在哪里,还算不算丢了。”
“不算。”
“好的,那您的酒壶没有丢。”

  1. 混淆特性输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。

摘自

作者:程序员吴师兄
链接:https://www.zhihu.com/question/47258682/answer/572450659
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

补充资料

什么是散列函数(hash function)

散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。

– 摘自 维基

个人理解, 对任意数据d, 都可以通过散列函数f(d)生成一个摘要, 且不存在其逆函数。注意,df(d)不是单射关系, 即f(d)可能等于f(d'), 这种情况叫“散列碰撞(collision)”.

散列函数的应用

验证 MD5
加密 RSA
签名 DSA RSA
短链接
哈希表 查找效率为O(n)

参考链接

常用哈希函数介绍
哈希表针对冲突的两种方式优缺点是什么?
维基