Java中4大必學基本加密算法,了解一下?

Java中4大必學基本加密算法,瞭解一下?

MD5加密算法

MD5加密算法是Ron Rivest設計的一種單向散列函數,它以512位分組為單位處理輸入明文(Plaintext)每個512位分組又分為16個32位子分組。算法的輸出為4個級聯的32位分組組成128位的散列值。MD5算法的初始化、主循環和尾部處理三個步驟如下:

Java中4大必學基本加密算法,瞭解一下?

  1. 初始化。算法初始化分為原始明文初始化和鏈接變量初始化兩個部分。明文初始化首先將長度為L的待加密明文P後面級聯一個字節0x80,再級聯若干個0x00作為填充,使其長度為(516*K-64)位(K為正整數),接著再級聯64位以字節計的明文長度。此時明文長度被填充為512位的整數倍,同時確保不同明文填充後不會相同。四個32位鏈接變量初始化為:A=0x1234567,B=0x789ABCDEF,C=0xFEDCBA98,D=0x76543210。這四個鏈接變量對於整個算法至關重要,其取值直接關係到配套設備軟件的編寫,務必將這四個鏈接變量寫正確。

  2. 算法主循環。主循環次數為經過填充的明文數據位數除以512位所得的商K。將鏈接變量A、B、C、D分別賦給a、b、c、d四個變量。每次主循環都有四輪,每輪進行16次操作。每次操作先對a、b、c、d中的三個進行一次非線性函數運算,然後將所得結果依次加上第四個變量Mj(文本中的一個子分組)和一個Ci(常數),將所得結果循環左移一個不定的常數S,然後再加上a、b、c、d其中之一,最後用該結果取代a、b、c、d其中之一。

  3. 尾部處理:每一次主循環全部完成之後,將A、B、C、D分別加上a、b、c、d,接著用下一個分組繼續運行算法,最後的輸出散列值是A、B、C、D的級聯。定義非線性函數FF(a,b,c,d,S,Ci):a=b+[F(b,c,d)+Mj+Ci]<

java實現代碼:

Java中4大必學基本加密算法,瞭解一下?

SHA加密算法

SHA(Secure HashAlgorithm,安全散列算法),數字簽名等密碼學應用中重要的工具,被廣泛地應用於電子商務

等信息安全領域。雖然,SHA與MD5通過碰撞法都被破解了。但是SHA仍然是公認的安全加密算法,較之MD5更為安全。

Java中4大必學基本加密算法,瞭解一下?

java實現代碼:

Java中4大必學基本加密算法,瞭解一下?

Base64加密算法

Base64就是一種基於64個可打印字符來表示二進制數據的表示方法。

因為有些網絡傳送渠道並不支持所有的字節,例如傳統的郵件只支持可見字符的傳送,像ASCII碼的控制字符就不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進制流的每個字節不可能全部是可見字符,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,做一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。這時候Base64編碼就應運而生。

Java中4大必學基本加密算法,瞭解一下?

java實現代碼:

Java中4大必學基本加密算法,瞭解一下?

HMAC加密算法

HMAC(Hash Message Authentication Code,散列消息鑑別碼,基於密鑰的Hash算法的認證協議。消息鑑別碼實現鑑別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑑別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑑別認證等。

Java中4大必學基本加密算法,瞭解一下?

JAVA代碼的實現:

Java中4大必學基本加密算法,瞭解一下?

Java中4大必學基本加密算法,瞭解一下?

總結

BASE64的加密解密是雙向的,可以求反解。 MD5、SHA以及HMAC是單向加密,任何數據加密後只會產生唯一的一個加密串,通常用來校驗數據在傳輸過程中是否被修改。其中HMAC算法有一個密鑰,增強了數據傳輸過程中的安全性,強化了算法外的不可控因素。單向加密的用途主要是為了校驗數據在傳輸過程中是否被修改。


分享到:


相關文章: