演算法系列 5分鐘了解雜湊演算法

2021-09-24 00:00:21 字數 1442 閱讀 1475

前言

雜湊演算法是現代密碼體系中的乙個重要組成部分。大家比較感興趣的數字貨幣,就使用了雜湊演算法。

雜湊演算法簡介

雜湊(hash)演算法又稱為雜湊演算法,通過hash演算法,可以將任意長度的資訊轉換成乙個固定長度的二進位制資料,我們經常會使用十六進製制值來表示轉換後的資訊。

比如,數字123,使用md5的hash演算法後,得到十六進製制的值:202cb962ac59075b964b07152d234b70

雜湊演算法的特點:

(1)不同的資訊,理論上得到的hash值不同,我們稱之為「無碰撞」,或者發生「碰撞」的概率非常小。

(2)不可逆,hash演算法是單向的,從hash值反向推導出原始資訊是很困難的。所以,有些系統中,我們可以使用hash演算法對密碼進行處理後儲存。

hash演算法的主要應用:

(1) 資料完整性校驗

我們可以將原始資料和經過雜湊演算法得到資料一塊傳送給對方,對方收到資料之後,對資料使用相同的雜湊演算法進行計算,如果得到的雜湊值和對方發過來的相同,那麼就說明資料沒有經過篡改。

(2) 數字簽名

一般我們先對原始資料進行hash處理,然後對處理後的資料使用私鑰進行加密。將原始資料和加密後資料傳送給接收方。接收方使用公鑰解密,然後對資料進行hash處理,最後對比,藉此實現使用者身份的驗證。

常見雜湊演算法

1 md5

md5在90年代初由mit的電腦科學實驗室和rsa data security inc發明,經md2、md3和md4發展而來。

md5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成乙個128bit位雜湊值。

2 sha-1

sha(secure hash algorithm)安全雜湊演算法是乙個密碼雜湊家族,由美國****局(nsa)所設計,也是一種雜湊演算法。

sha-1 演算法輸入以512位資料塊為單位處理,產生160位元的訊息摘要作為輸出。

3 **

public static string md5(string plaintext) catch (nosuchalgorithmexception e) {

throw new runtimeexception("沒有md5這個演算法!");

//將hash後的資料轉換為16進製制數字

string md5code = new biginteger(1, secretbytes).tostring(16);// 16進製制數字

// 如果生成數字未滿32位,需要前面補0

for (int i = 0; i < 32 - md5code.length(); i++) {

md5code = "0" + md5code;

return md5code;

總結雜湊演算法有很多,計算過程也比較複雜,但是大多數情況下,我們不用自己寫**實現這些演算法,只需要呼叫相關演算法庫中的方法即可。

Python演算法系列 雜湊演算法

四 總結 雜湊演算法又稱雜湊函式演算法,是一種查詢演算法。就是把一些複雜的資料通過某種對映關係。對映成更容易查詢的方式,但這種對映關係可能會發生多個關鍵字對映到同一位址的現象,我們稱之為衝突。在這種情況下,我們需要對關鍵字進行二次或更多次處理。出這種情況外,雜湊演算法可以實現在常數時間內儲存和查詢這...

5分鐘了解docker

一 概念 開源的應用容器引擎,打包開發者的應用及依賴包在乙個可移植的容器中,相當於沙箱。docker允許開發人員在單個作業系統上隔離和執行多個應用程式,而不是為伺服器上的每個應用程式專用乙個虛擬機器。這是通過將應用程式隔離在單獨的容器中來實現的,這些應用程式雖然被容器分隔開,但是卻可以共享作業系統和...

5分鐘理解onecache hash演算法

onecahce中的hash演算法有兩種 onecache自帶演算法 twemproxy的ketama演算法 可以實現和twemproxy的直接切換。hash函式通過配置檔案中的root節點的hash屬性配置。如果需要用twemproxy的ketama演算法,則配置twemproxy mode 1。...