關於DES加密中的 DESede/CBC/PKCS5Padding


今天看到一段3DES加密算法的代碼,用的參數是DESede/CBC/PKCS5Padding,感覺比較陌生,於是學習了一下。

 

遇到的java代碼如下:

Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding");

 

以前寫的代碼,給的參數都是DES或DESede。實際上DESede是簡寫,它與DESede/ECB/PKCS5Padding等價。這個參數分為三段。

- 第一段是加密算法的名稱,如DESede實際上是3-DES。這一段還可以放其它的對稱加密算法,如Blowfish等。

 

- 第二段是分組加密的模式,除了CBC和ECB之外,還可以是NONE/CFB/QFB等。最常用的就是CBC和ECB了。DES采用分組加密的方式,將明文按8字節(64位)分組分別加密。如果每個組獨立處理,則是ECB。CBC的處理方式是先用初始向量IV對第一組加密,再用第一組的密文作為密鑰對第二組加密,然后依次完成整個加密操作。如果明文中有兩個分組的內容相同,ECB會得到完全一樣的密文,但CBC則不會。

 

- 第三段是指最后一個分組的填充方式。大部分情況下,明文並非剛好64位的倍數。對於最后一個分組,如果長度小於64位,則需要用數據填充至64位。PKCS5Padding是常用的填充方式,如果沒有指定,默認的方式就是它。

 

補充一點,雖然DES的有效密鑰長度是56位,但要求密鑰長度是64位(8字節)。3DES則要求24字節。

 

 

C#

有時候java加密的內容用C#解密不了,一般原因都是設定的參數不正確。C#獲取的TripleDES對象必需設定Mode和Padding兩個屬性。Mode和Padding是枚舉類型。Mode有對應的ECB和CBC對應的枚舉值,但Padding的PKCS5Padding需要對應PKCS7。

 

示例代碼

TripleDES d = TripleDES.Create();

d.Mode = CipherMode.CBC;

d.Padding = PaddingMode.PKCS7;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM