DES加密演算法細解
enc = Cipher.getInstance("DES/CBC/PKCS5Padding"); keySpec = new SecretKeySpec(key, "DES");//key ivSpec = new IvParameterSpec(iv);//iv enc.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); enc.doFinal(indata);//encrypt
DES可以有這幾種模式: Electronic Codebook (ECB) , Cipher Block Chaining (CBC) , Cipher Feedback (CFB) , Output Feedback (OFB) 最基本的是ECB模式,CBC和其他模式都是改進。 ECB模式的缺點是相同的明文加密成相同的密文,明文的規律帶到密文。\\ 因為DES是一種block cipher,一個block要8個位元組,所以要加密的東西要分成8位元組的整數倍,不足的就填充。 PKCS5Padding這種填充,填的位元組代表所填位元組的總數: 比如差三個位元組的話填為 @@@@@333 差7個位元組就填為 @7777777 沒有差就填 88888888 這樣只要讀出最後一個位元組的內容就知道哪些位元組是填充的。 其他填充方式還有: ISO10126-2Padding ISO7816-4Padding X9.23Padding TBCPadding ZeroBytePadding
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