色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Hash函數特點

李中冰2年前18瀏覽0評論

Hash函數特點?

第一個特點:輸入可以任意長度,輸出是固定長度

哈希函數不用知道輸入信息代表的是什么意思,也無所謂信息的長度有多長,只要輸入hash函數出來的都是固定長度的比特值。比如非常有名的SHA256 哈希函數,輸入任何值出來的都是256比特的0和1. 輸入一本《三國演義》或者僅僅輸入一個字母a,出來的都是256位比特長度的數據。

第二個特點:計算hash值的速度比較快

這一點經常被大家所忽略,似乎是習以為常的東西就不去在意,其實這一點同樣重要,因為單向哈希的計算很快,才能保證加密或者驗證的速度。

第三個特點,防碰撞特性(Collisionresistance)

X≠y,H(x)=H(y) 輸入空間遠遠大于輸出空間,比如256位的哈希值指的就是輸出空間是2^256這么多,輸入是無限可能的,輸出是固定長度。

但是,目前沒有找到沒有好的方法去找出一個x能得到H(x)等于右邊的值。

遍歷所有輸入的可能能去找到這個值,叫做brute-force暴力破解嗎,也就是現在礦機所謂的“哈希碰撞”這個詞的來源。

哈希防碰撞用處是保證上傳和下載的數據是一樣的,就是改一點點出來的結果差很多。舉個例子,你輸入的信息是一部《紅樓夢》(當然電腦識別出來就是0和1),然后你在紅樓夢的第100頁的第五句話把一個逗號改成句號,然后輸出的hash值就完全不同了。這就是哈希函數一個非常重要的特性。

但是collision resistance目前沒有數學證明這個碰撞不會發生,MD5就是最好的例子,之前是很安全的,但是后來找到了破解方法。

第四個特點:隱藏性(Hiding)或者叫做單向性(one-way)

哈希函數的計算過程是單向不可逆的。x推出H(x),但是反推沒有法子(單向性),也就是說,哈希值沒有泄露輸入的x的信息。也就是說x的信息被隱藏了起來,這也就就是隱藏性。

輸入空間要足夠大,取值是均勻的,這樣就很難暴力破解。

利用第三和第四個特性可以做出很有趣的應用場景。

比如預測一個事情。現實世界中預測和結果很多時候是有微妙的關系的,比如三國時期,曹操專門去找當時的人物品鑒專家許劭,讓他看看自己是什么材料,許劭評價曹操是“治世之能臣,亂世之奸雄”,這個很難說他評的準不準,或許因為這個評語,影響了曹操的心理,他就朝這個方向發展了,就成了自我驗證的預言了。所以,很難判斷預測是否真的準。

更簡單例子是,有影響力的股評師,今天預測一下明天的股價是不是增長,那么,他如果公開表明幣價,可能會影響幣價。

所以如何表明他確實很準確呢?讓他把股評信息寫到紙上,或者存到電腦里,但是要求是第二天開盤后,不能偷偷修改內容,這樣就不用擔心預測影響股價了。那么現在需要做的只是一件事兒:保證他沒有篡改自己已經寫好的內容。

那么,可以用hash算法,預測的結果(信息)是x,對x 哈希函數一下,公布hash值,第二天收盤再把x放出來,如果你改了昨天的數據,hash就變了。所有人都可以用hash算一下這個x和昨天公布的hash值進行對比。

實際情況下,實際的輸入空間不是很大,輸入不夠隨機,擔心有人對上升下跌這樣的詞匯語句進行組合排列,找到這個x,為了保證安全性,會加入一個nonce隨機數,公式表達如下。

H(x丨丨nonce) nonce是一個隨機數

意思就是預測的結果信息x后面加個隨機數,一起得到hash。

第五點:謎題友好(puzzlefriendly)

就是說看x不知道H(x)是什么?這個無法從輸入數據,判斷到底輸出是什么樣子。就是說,知道輸入的信息,無法一眼看出來輸出的hash值是什么,謎題友好性值得就是這一點:你無法通過控制輸入值x來獲得想要的輸出值H(x)

所以,綜合隱藏性和謎題友好性兩個特點,知道輸入信息也不知道哈希值是什么,可以很快算出來,但是無法預先判斷;知道哈希值也不能知道輸入值是什么,反向計算是非常非常困難的,只能暴力破解。

所以如果你想要輸出的值落在某一個范圍里,比如小于某個數值,計算機只能一個一個去試去猜答案,看哪個輸入算出來的輸出值正好是落在你想要的范圍內。

你要得到一個hash值前面K位是0。你無法知道怎么得到前面是這么多0的x。

java逆向遍歷,Hash函數特點