java與C++的DES加密與解密

DES(Data Encryption Standard)算法,於1977年得到美國政府的正式許可,是一種用56位密鑰來加密64位數據的方法。一般密碼長度爲8個字節,其中56位加密密鑰,每個第8位都用作奇偶校驗。

DES的幾種工作方式

第一種電子密本方式(ECB)
將明文分成n個64比特分組,如果明文長度不是64比特的倍數,則在明文末尾填充適當數目的規定符號。對明文組用給定的密鑰分別進行加密,行密文C=(C0,C1,……,Cn-1)其中Ci=DES(K,xi),i=0,1,…..,n-1。

第二種密文分組鏈接方式(CBC)
在CBC方式下,每個明文組xi在加密前與先一組密文按位模二加後,再送到DES加密,CBC方式克服了ECB方式報內組重的缺點,但由於明文組加密前與一組密文有關,因此前一組密文的錯誤會傳播到下一組。

第三種密文反饋方式(CFB),可用於序列密碼
明文X=(x0,x1,……,xn-1),其中xi由t個比特組成0 第四種輸出反饋方式(OFB),可用於序列密碼
與CFB唯一不同的是OFB是直接取DES輸出的t個比特,而不是取密文的t個比特,其餘都與CFB相同。但它取的是DES的輸出,所以它克服了CFB的密文錯誤傳播的缺點

DES的幾種填補方式
DES是對64位數據的加密算法,如數據位數不足64位的倍數,需要填充,補充到64位的倍數。

NoPadding
API或算法本身不對數據進行處理,加密數據由加密雙方約定填補算法。例如若對字符串數據進行加解密,可以補充\0或者空格,然後trim

PKCS5Padding
加密前:數據字節長度對8取餘,餘數爲m,若m>0,則補足8-m個字節,字節數值爲8-m,即差幾個字節就補幾個字節,字節數值即爲補充的字節數,若爲0則補充8個字節的8
解密後:取最後一個字節,值爲m,則從數據尾部刪除m個字節,剩餘數據即爲加密前的原文

SSL3Padding
SSL3.0協議定義的填補算法


java默認的DES算法實現方式爲DES/ECB/PKCS5Padding。若c++或其他語言與java進行加解密互通,若java採用默認實現,另一方工作方式和填補算法必須都是用ECB和PKCS5Padding。

轉自:[url=http://bloodwolf-china.iteye.com/blog/655000]java與C++的DES加密與解密[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章