1. 程式人生 > >DES加密演算法細解

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