哈希散列,消息信息摘要及數字加密整理

散列的基本概念

散列(hash table)是普通數組概念的延伸,它的出現是爲了實現快速的插入,刪除,查詢等功能(字典操作)的數據結構。在數據查找功能中平均時間複雜度爲O(1)。

Hash,一般翻譯做“散列”,也有直接音譯爲“哈希”的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

在散列表中,不是直接把關鍵字作爲下標,而是根據關鍵字計算出相應的下標。

直接尋址
直接尋址是將所有的關鍵字放在一個數組內,但這種方式侷限於關鍵字比較少的時候,否則會浪費掉大量的存儲空間。
所以當實際存儲的關鍵字比全部的可能關鍵字總數要小時,散列可以有效的代替數組。

HASH表的原理

散列表是通過散列函數h,將關鍵字映射到散列表中,從而減小了數組下標的範圍。
這裏寫圖片描述

##散列函數:
散列應儘可能被等可能得散列開來(少衝突),並且和其他已散列的關鍵字散列到哪兒無關。當散列的關鍵字不是自然數時,就需要將他們轉化爲自然數。
常用的散列方法。
1>.除法散列法:
通過取k除以m的餘數,將關鍵字k映射到m個空間內
函數表達式爲: h(k) = k mod m
使用注意:m值的選擇:不應爲2的冪,而可以設置成2一個不太接近2的整數冪的素數。

2>.乘法散列法
乘法散列包含2個步驟:
第一步:用關鍵字k乘上常數A(A在0-1中間),並提取k*A的小數部分。第二步:用m乘上這個值,然後向下取整。
函數表達式爲: h(k) = [m(kA mod 1)]
改方法對m的要求不高,一般選爲2的某個冪次。

3>.全域散列
全域散列法是在執行的一開始,就從一組精心設計的函數中,隨機挑選一個作爲散列函數。該方法僅當編譯器選擇了一個隨機的散列函數,使得標識符的散列效果較差是纔會出現較差的性能。

衝突:當兩個關鍵字映射到同一個位置時,則會發生衝突。
散列的平均性能取決於所採用的的散列函數h,及分佈的均勻程度。
解決散列衝突的方法
1>.鏈接法:
將散列的槽中放入鏈表,鏈表連接衝突的關鍵字。
2>.開放尋址法:
開放尋址法要求所有的元素都在散列表裏。即每個表項或包含動態集合的一個元素,或者爲空。
注:該方法不能存放超過散列表設定的大小


散列在密碼學應用

散列可以用作單向加密,也就是說,只能從源數據推出結果,但無法從結果得到源數據,並且源數據不同得到的結果也不同,即不可逆和不可僞造特性。因爲這些特性延伸出來一些應用:如數字加密,消息信息摘要。

常見的消息信息摘要

信息摘要的原理是加密哈希函數。這種散列函數的輸入數據通常被稱爲消息,輸出結果被稱爲消息摘要。經過特定的算法得到一小段驗證信息,用來檢查某段消息的完整性是否被篡改等。

消息摘要算法分爲三類:

MD(Message Digest):消息摘要

SHA(Secure Hash Algorithm):安全散列

MAC(Message Authentication Code):消息認證碼

MD算法

MD算法包括: MD2,MD4,MD5。其中現在基本都用MD5,相關資料可以參考

https://baike.baidu.com/item/MD5/212708?fr=aladdin

MD5算法的原理可簡要的敘述爲:MD5碼以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,經過了一系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。

目前md5還是不太安全的:

https://blog.csdn.net/wufaliang003/article/details/79794982

SHA算法

SHA算法包括:SHA-1,SHA-2。其中SHA-2又包括:SHA-224,SHA-256,SHA-384,SHA-512。
SHA-1算法和MD5算法都有MD4算法導出,因此他們倆的特點、缺陷、應用場景基本是相同的。但目前SHA-1也不安全。

算法 摘要長度(bit)
SHA-1 160
SHA-224 224
SHA-256 256
SHA-384 384
SHA-512 512

算法原理參考

https://blog.csdn.net/wufaliang003/article/details/79782168

MAC算法

MAC算法 (Message Authentication Codes) 帶祕密密鑰的Hash函數:消息的散列值由只有通信雙方知道的祕密密鑰K來控制。此時Hash值稱作MAC。

參考:

http://www.doc88.com/p-6961354229988.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章