什麼是哈希函數
最近比特幣太火了,很多人問我比特幣和區塊鏈技術,我說區塊鏈肯定是技術,而且是顛覆性的技術,是比特幣底層的實現技術,是一門包括數學、密碼學、分散式計算、P2P交易演算法和金融領域的正經技術,至於比特幣正經不正經俺就不知道了!
區塊鏈技術中有一個很重要的概念是哈希值或者加密密碼學技術,今天稍微縣介紹一下Hash函數:
我對哈希值的理解還是來自一次事件。大概是前年某晚上發生一次蘋果操作系統的重大安全事件,我們知道蘋果操作系統是相對封閉的,開發蘋果iOS的App往往需要用Xcode編程,程序員因為偷懶或沒有意識到安全性往往沒有從官方App Store下載Xcode程序,而是選擇了更快下載或在某些網盤上的Xcode程序。
相信您在下載一個文件的時候從來也沒有考慮過是否有人在文件動了手腳(修改、添加、時間戳、安全性MD5哈希值),換句話說任何文件只要有任何改動都會與原生的Xcode的哈希值不同。當時情景是說有人在Xcode植入了木馬或竊取賬號或信息的代碼可以發生信息或賬戶信息到某個伺服器。當然馬上這個小伙說這是一個惡作劇或測試,並沒有盜取信息,蘋果隨後修訂了布丁。
這次重大安全事故,不僅是個別iOS的App,而且很多大應用App都是這樣的,說明驗證文件唯一性有多麼重要。
Hash函數是一個接受輸入值input的函數,並且從該輸入創建基於輸入值的確定性輸出值output。對於任何x輸入值,只要hash函數運行,我們將始終收到相同的y輸出值而且具有唯一性。這樣,每個輸入都有一個確定的輸出。
f(x) = y
f函數基本上是接受輸入並從該輸入派生輸出的東西。因此,哈希函數需要一個輸入(可以是任何數據 - 數字,文件等)並輸出哈希。也就意味著如果你輸入一組數字、一本電子書、MP3、任何文件、圖像、視頻或任何內容,在區塊鏈上成為塊(Block)內的數據(Data)將產生一個哈希值。
哈希值通常顯示為十六進位數字。這是哈希函數md5,它從任何輸入數據創建一個32個字元的十六進位輸出。哈希函數通常是不可逆的(單向one-way),這意味著如果只知道輸出,則不能計算輸入的內容是什麼- 除非您嘗試所有可能的輸入(這稱為暴力攻擊,或暴力破解,計算機領域俗稱反編譯)。
哈希函數通常用於證明某些事物與其他事物相同,而不事先揭示信息。也就是說如果兩個事物的哈希值相等,意味著這兩個事物是同一個,但往往我們並不知道或不想告訴你是什麼東西。
就好比說你猜答案,結果你猜到猜准了這個哈希值,我就說你猜對了,但你並不一定知道答案的具體內容是什麼。比方說,張三正在向李四吹噓,他知道在數學課上老師提出挑戰問題的答案。李四當然希望證明張三是不是真的知道答案,但李四又不能告訴張三這是答案什麼。所以,張三將他的答案(假設答案是42)通過演算法產生這個哈希值:
當張三告訴李四,他通過答案產生了一個哈希值的時候,李四看到哈希值後就可以證明張三是真的知道答案的。
哈希序列通常用於驗證信息的唯一情況,而又不想或不會向正在驗證的一方揭示答案是什麼的情況。
網上很容易找到哈希計算器!
當然還有很多加密技術,也有不同的類似密碼加密演算法,這涉及到密碼學的相關知識!
沈浩老師
——————
中國傳媒大學新聞學院教授、博士生導師
中國傳媒大學調查統計研究所所長
大數據挖掘與社會計算實驗室主任
中國市場研究行業協會會長
歡迎關注沈浩老師的微信公共號
歡迎關注俺任會長的市場研究協會:
TAG:沈浩老師 |