2008-12-04 31 views
5

我正在使用16字節塊大小的AES密碼。Java密碼 - AES填充問題

如果我嘗試加密一個16字節的字符串,我沒有任何問題,但其他長度不是16的倍數是拋出異常。

我知道用3-DES可以指定一個填充類型作爲算法的一部分,並且它不需要額外的工作(例如DES/CBC/PKCS5Padding),但是有沒有辦法用AES指定呢?

或者我是否需要手動將pytes填充到16的倍數,然後在解密時將它們去除?這是一個縮寫代碼示例。

encrypt = Cipher.getInstance("AES", provider); 
encrypt.init(Cipher.ENCRYPT_MODE, key) ; 
byte[] encrypted = encrypt.doFinal(plainTxt.getBytes()) ; 

任何和所有回覆讚賞!

由於提前, 夏蘭

+2

迂迴評論:根據定義,AES只有16字節塊大小。 Rijndael(原始名稱和規範)的塊大小爲16,24和32個字節,但在AES中僅允許使用16個字節的塊。 Rijndael也支持128,160,192,224,256密鑰,但AES中僅支持128,192和256。 – 2011-02-06 09:56:57

回答

5

它應該工作精確地與AES相同,即,填充模式必須與密碼一起指定。實現哪些填充模式取決於提供者,應在其文檔中進行描述。

按照JCE文檔: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA 像PKCS5Padding標準填充模式應該始終支持(至少,這就是我理解它)。

+0

男孩我熟悉那個頁面:)當你說提供者時,你的意思是我正在使用的JCE的實現嗎?我會爲此查看文檔。 – 2008-12-05 08:02:31