閱讀495 返回首頁    go 技術社區[雲棲]


加密算法說明(Base64、MD5、DES)

A).  Base64

Base64編碼的思想是是采用64個基本的ASCII碼字符對數據進行重新編碼。它將需要編碼的數據拆分成字節數組。以3個字節為一組。按順序排列24位數據,再把這24位數據分成4組,即每組6位。再在每組的的最高位前補兩個0湊足一個字節。這樣就把一個3字節為一組的數據重新編碼成了4個字節。當所要編碼的數據的字節數不是3的整倍數,也就是說在分組時最後一組不夠3個字節。這時在最後一組填充1到2個0字節。並在最後編碼完成後在結尾添加1到2個“=”。例:將對ABC進行BASE64編碼首先取ABC對應的ASCII碼值。A(65)B(66)C(67)。再取二進製值A(01000001)B(01000010)C(01000011),然後把這三個字節的二進製碼接起來(010000010100001001000011),再以6位為單位分成4個數據塊並在最高位填充兩個0後形成4個字節的編碼後的值(00010000)(00010100)(00001001)(00000011)。藍色部分為真實數據。再把這四個字節數據轉化成10進製數得(16)(20)(19)(3)。最後根據BASE64給出的64個基本字符表,查出對應的ASCII碼字符(Q)(U)(J)(D)。這裏的值實際就是數據在字符表中的索引。注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

解碼過程就是把4個字節再還原成3個字節再根據不同的數據形式把字節數組重新整理成數據。

B).  DES

DES是Data Encryption Standard(數據加密標準)的縮寫。DES是一個分組加密算法,他以64位為分組對數據加密。同時DES也是一個對稱算法:加密和解密用的是同一個算法。它的密匙長度是56位(因為每個第8位都用作奇偶校驗),密匙可以是任意的56位的數,而且可以任意時候改變。其中有極少量的數被認為是弱密匙,但是很容易避開他們。所以保密性依賴於密鑰。

DES對64(bit)位的明文分組M進行操作,M經過一個初始置換IP置換成m0,將m0明文分成左半部分和右半部分m0=(L0,R0),各32位長。然後進行16輪完全相同的運算,這些運算被稱為函數f,在運算過程中數據與密匙結合。經過16輪後,左,右半部分合在一起經過一個末置換,這樣就完成了。在每一輪中,密匙位移位,然後再從密匙的56位中選出48位。通過一個擴展置換將數據的右半部分擴展成48位,並通過一個異或操作替代成新的32位數據,在將其置換換一次。這四步運算構成了函數f。然後,通過另一個異或運算,函數f的輸出與左半部分結合,其結果成為新的右半部分,原來的右半部分成為新的左半部分。將該操作重複16次,就實現了。

解密過程:在經過所有的代替、置換、異或盒循環之後,你也許認為解密算法與加密算法完全不同。恰恰相反,經過精心選擇的各種操作,獲得了一個非常有用的性質:加密和解密使用相同的算法。DES加密和解密唯一的不同是密匙的次序相反。如果各輪加密密匙分別是K1,K2,K3….K16那麼解密密匙就是K16,K15,K14…K1。

C).  MD5

MD5的全稱是Message-DigestAlgorithm 5,Message-Digest泛指字節串(Message)的Hash變換,就是把一個任意長度的字節串變換成一定長的大整數。請注意我使用了"字節串"而不是"字符串"這個詞,是因為這種變換隻與字節的值有關,與字符集或編碼方式無關。 MD5將任意長度的"字節串"變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被"篡改"。舉個例子,你將一段話寫在一個叫readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的"抵賴",這就是所謂的數字簽名應用。

MD5還廣泛用於加密和解密技術上,在很多操作係統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,係統是把用戶輸入的密碼計算成MD5值,然後再去和係統中保存的MD5值進行比較,而係統並不"知道"用戶的密碼是什麼。

一些黑客破獲這種密碼的方法是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。即使假設密碼的最大長度為8,同時密碼隻能是字母和數字,共26+26+10=62個字符,排列組合出的字典的項數則是P(62,1)+P(62,2)....+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁盤組,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。


最後更新:2017-04-02 15:15:07

  上一篇:go 開源與封閉的下一片戰場——汽車行業
  下一篇:go 微軟“十招” 讓雲端的數據中心更綠色