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。
已有 0 人發表留言,猛擊->>這里<<-參與討論
ITeye推薦