Hash与摄影的比较
提到hash,有些人都问过这个名词,回复基本上都是“指纹”,“抽象”之类的,但是俺脚着用相机、底片来做比喻可能更挺形象一些。
将hash与照相 相比较,可简单对应理解为
特定的hash函数 |
某一型号相机 |
hash结果 |
底片或照片 |
hash过程 |
照相的过程 |
hash的输入数据 |
取景的景物 |
摄影 |
hash |
景物是多样的,包含的信息是海量的 |
输入数据是多样的,信息是海量的 |
底片的容量是有限的 |
hash结果长度是固定的,也就是是容量是有限的 |
不同的底片反映不同的事物 |
不同的hash结果表明不同的输入 |
通过底片不能恢复成景物 |
通过结果不能推断输入 |
不同的景物可能在底片上留存相同的影像 |
不同的输入可能产生相同的结果 |
用摄影的行为来理解hash,就很容易理解后三点了
hash函数就像对一堆数据进行照相,那么不同的数据自然会产生不同的结果
通过结果来推断输入,就像用底片来还原景物一样,二维还原到三维时,信息量不足
最后一点,用照片翻拍来形容吧,实景照片 与 实景的照片进行翻拍的照片可能是一样的,而到了hash中,因为hash结果长度是有限的,比如md5,结果为16字节,那么最多容纳2^128种输入数据,当数据的种类超过2^128时,必然会产生有两种数据的md5 hash结果相同。