hash函數(shù)應(yīng)具有的性質(zhì)?
哈希函數(shù)的特性:
單向散列函數(shù)(one-wayhash function),也就是通俗叫的哈希函數(shù)。
第一個特點:輸入可以任意長度,輸出是固定長度
哈希函數(shù)不用知道輸入信息代表的是什么意思,也無所謂信息的長度有多長,只要輸入hash函數(shù)出來的都是固定長度的比特值。比如非常有名的SHA256 哈希函數(shù),輸入任何值出來的都是256比特的0和1. 輸入一本《三國演義》或者僅僅輸入一個字母a,出來的都是256位比特長度的數(shù)據(jù)。
第二個特點:計算hash值的速度比較快
這一點經(jīng)常被大家所忽略,似乎是習(xí)以為常的東西就不去在意,其實這一點同樣重要,因為單向哈希的計算很快,才能保證加密或者驗證的速度。
第三個特點,防碰撞特性(Collisionresistance)
X≠y,H(x)=H(y) 輸入空間遠(yuǎn)遠(yuǎn)大于輸出空間,比如256位的哈希值指的就是輸出空間是2^256這么多,輸入是無限可能的,輸出是固定長度。
但是,目前沒有找到?jīng)]有好的方法去找出一個x能得到H(x)等于右邊的值。
遍歷所有輸入的可能能去找到這個值,叫做brute-force暴力破解嗎,也就是現(xiàn)在礦機所謂的“哈希碰撞”這個詞的來源。
哈希防碰撞用處是保證上傳和下載的數(shù)據(jù)是一樣的,就是改一點點出來的結(jié)果差很多。舉個例子,你輸入的信息是一部《紅樓夢》(當(dāng)然電腦識別出來就是0和1),然后你在紅樓夢的第100頁的第五句話把一個逗號改成句號,然后輸出的hash值就完全不同了。這就是哈希函數(shù)一個非常重要的特性。