hash 值是否唯一確定?如果是,為什麼不可逆?

既然 hash 值能用來校驗文件,那應該是和文件一一對應的。既然如此,為什麼不能從 hash 值得到文件呢?


簡短回答:哈希函數不是單射。


hash演算法有兩個基本特點:可重複和不可逆。即不同的原文理論上有可能得到相同的hash值;也正是因為如此,從hash值反推出原文是不可能的。

引用一段百度百科

所有散列函數都有如下一個基本特性:如果兩個散列值是不相同的(根據同一函數),那麼這兩個散列值的原始輸入也是不相同的。這個特性是散列函數具有確定性的結果。但另一方面,散列函數的輸入和輸出不是一一對應的,如果兩個散列值相同,兩個輸入值很可能是相同的,但並不能絕對肯定二者一定相等。輸入一些數據計算出散列值,然後部分改變輸入值,一個具有強混淆特性的散列函數會產生一個完全不同的散列值。


數據摘要演算法不是壓縮/加密演算法。幾百m的東西摘要一下就一個字元串還能逆向的話

恭喜你發現了二十一世紀最強壓縮演算法


1的平方=1

-1的平方=1

不同的值通過同一重演算法可能會獲得到相同的結果,所以有結果不一定能推測到原始值。


hash值的唯一性僅僅在是同一個文件的情況下得到了同樣的hash值,而哪怕錯誤一個位元組也會得到不一樣的hash值。

也就是一個隱含條件就是說它的極限在於絕大部分的數據都是正確的前提下

所以類似可以推論一定存在某個文件得出的hash值,用另一個完全不同的文件比較hash值卻相同的可能性


推薦閱讀:

這件T恤上的代碼是什麼意思?
如何能夠在公司中真正的用好數據分析?
HDMI傳輸無損信號,音畫質會有區別么?
做為面試官 當你問 C++虛析構函數 的作用時你期望的答案是什麼?
如何評價CUDA、OpenCL、OpenMP、OpenACC等主流並行運算框架?

TAG:數學 | 計算機 | 加密 | 哈希函數 |