MD5加密算法

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

初始化。算法初始化分爲原始明文初始化和鏈接變量初始化兩個部分。明文初始化首先將長度爲L的待加密明文P後面級聯一個字節0x80,再級聯若干個0x00作爲填充,使其長度爲(516*K-64)位(K爲正整數),接着再級聯64位以字節計的明文長度。此時明文長度被填充爲512位的整數倍,同時確保不同明文填充後不會相同。四個32位鏈接變量初始化爲:A=0x1234567,B=0x789ABCDEF,C=0xFEDCBA98,D=0x76543210。這四個鏈接變量對於整個算法至關重要,其取值直接關係到配套設備軟件的編寫,務必將這四個鏈接變量寫正確。算法主循環。主循環次數爲經過填充的明文數據位數除以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其中之一。尾部處理:每一次主循環全部完成之後,將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實現代碼:

SHA加密算法

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

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

java實現代碼:

Base64加密算法

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

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

java實現代碼:

HMAC加密算法

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

JAVA代碼的實現:

總結

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

相關文章