先说答案
- 确定性如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。
- 散列碰撞(collision)散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。
- 不可逆性一个哈希值对应无数个明文,理论上你并不知道哪个是。
“船长,如果一样东西你知道在哪里,还算不算丢了。”
“不算。”
“好的,那您的酒壶没有丢。”
- 混淆特性输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。
摘自
作者:程序员吴师兄
链接:https://www.zhihu.com/question/47258682/answer/572450659
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
补充资料
什么是散列函数(hash function)
散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。
– 摘自 维基
个人理解, 对任意数据d
, 都可以通过散列函数f(d)
生成一个摘要, 且不存在其逆函数。注意,d
和f(d)
不是单射关系, 即f(d)
可能等于f(d')
, 这种情况叫“散列碰撞(collision)”.
散列函数的应用
验证 MD5
加密 RSA
签名 DSA RSA
短链接
哈希表 查找效率为O(n)