雜湊(hash)演算法,就是把任意長度的輸入通過雜湊演算法變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來確定唯一的輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。
雜湊演算法性質
如果兩個雜湊值是不相同的,那麼這兩個雜湊值的原始輸入也是不相同的。如果兩個雜湊值是相同的,兩個輸入值很可能是相同的,但不絕對肯定二者一定相等。輸入一些資料計算出雜湊值,然後部分改變輸入值,乙個具有強混淆特性的雜湊函式會產生乙個完全不同的雜湊值。
雜湊查詢步驟
1、使用雜湊函式將被查詢的鍵轉換為陣列的索引。在理想的情況下,不同的鍵會被轉換為不同的索引值,但是需要處理多個鍵被雜湊到同乙個索引值的情況。所以雜湊查詢的第二個步驟就是處理衝突
2、處理雜湊碰撞衝突。如常用的拉鍊法和線性探測法。
雜湊常用演算法
1、md4
md4(rfc 1320)是 mit 的 ronald l.rivest在 1990 年設計基於 32 位運算元的位操作來實現的演算法。
2、md5
md5(rfc 1321)是rivest於2023年對md4的改進版本號。
3、sha-1及其它
sha1是由nist nsa設計為同dsa一起使用的,它對長度小於264的輸入,產生長度為160bit的雜湊值,因此抗窮舉效能更好。
雜湊時間複雜度
雜湊演算法就是把key通過乙個固定的演算法函式既所謂的雜湊函式轉換成乙個整型數字,然後就將該數字對陣列長度進行取餘,取餘結果就當作陣列的下標,將value儲存在以該數字為下標的陣列空間裡。所以雜湊表的插入和查詢的時間複雜度都是o(1)。
雜湊演算法特點
在用到雜湊進行管理的資料結構中,就對速度比較重視,對抗碰撞不太看中,只要保證雜湊均勻分布就可以。在不同的使用場景中,如資料結構和安全領域裡,其中對某一些特點會有所側重。
1、正向快速:給定明文和 hash演算法,在有限時間和有限資源內能計算出hash值。
2、逆向困難:給定hash值,在有限時間內很難逆推出明文。
3、輸入敏感:原始輸入資訊修改一點資訊,產生的hash值都有很大的不同。
4、衝突避免:很難找到兩段內容不同的明文,使得它們的hash值一致。即對於任意兩個不同的資料模組,其hash值相同的可能性極小。對於給定的資料塊,找到和它hash值相同的資料塊極為困難。
雜湊構造方法
2、數字分析法:根據hash的關鍵字的特點擊擇合適hash演算法。
5、隨機數法:通常關鍵字不等的時候採用此法構造雜湊函式較恰當。
雜湊演算法的應用
1、檔案校驗
md5 hash演算法的"數字指紋"特性,使它成為應用最廣泛的一種檔案完整性校驗和(checksum)演算法,不少unix系統有提供計算md5 checksum的命令。
2、數字簽名
由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了乙個重要的角色。對hash值進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3、鑑權協議
傳輸通道是可被偵聽的,但在不可被篡改的情況下,這是一種簡單而安全的傳輸方法。
Dex檔案的完整性校驗
classes.dex 在 android 系統上基本負責完成所有的邏輯業務,因此很多針對android 應用程式的篡改都是針對 classes.dex 檔案的。在 apk 的自我保護上,也可以考慮對 classes.dex檔案進行完整性校驗,簡單的可以通過 crc 校驗完成,也可以檢查 hash ...
掃盲檔案完整性校驗 關於雜湊值和數字簽名
什麼是 完整性校驗 所謂的 完整性校驗 顧名思義,就是檢查檔案是否完整。那麼,什麼情況下會導致檔案不完整捏?大概有如下幾種情況。1.感染病毒 比方說你的系統中了病毒,病毒感染了某個軟體安裝包或者某個可執行程式。那麼該檔案的完整性就被破壞了。雜湊演算法 雜湊演算法 掃盲 什麼是 雜湊演算法 雜湊演算法...
用md5演算法檢測檔案的完整性
md5演算法常常被用來驗證網路檔案傳輸的完整性,防止檔案被人篡改。md5全稱是報文摘要演算法 message digest algorithm5 此演算法對任意長度的資訊逐位進行計算,產生乙個二進位制長度為128位 十六進製制長度就是32位 的 指紋 或稱 報文摘要 不同的檔案產生相同的報文摘要的可...