2011-07-27 37 views
1

我一直卡在我的代碼中的錯誤,它不會讓我解密正確! 我只傳遞八個字節的數據到dataBytes,我將 一個24字節的密鑰傳遞給keyBytes。 我想以字節數組的形式返回解密數據。 我不斷收到錯誤的填充異常。解密錯誤使用des ede,javax.crypto.badpaddingexception

謝謝!

這裏是代碼片段:

private static byte[] DESEdeDecrypt(byte[] keyBytes, byte[] dataBytes){ 

    byte[] decryptedData = null; 
    try{ 
     DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes, 0); 
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); 
     SecretKey key = keyFactory.generateSecret(keySpec); 
     Cipher cipher = Cipher.getInstance("DESede"); 
     cipher.init(Cipher.DECRYPT_MODE, key); 
     decryptedData = cipher.doFinal(dataBytes); 
    } 
    catch(Exception e){System.out.println(e);} 

    return decryptedData; 
+0

如果您尚未在另一側指定任何填充,請嘗試使用「DESede/ECB/NoPadding」... –

回答

1

您必須使用相同的填充解密爲你做了加密。最好明確地設置它,而不是依靠默認設置。最好也指定兩端的模式以及:

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

DESede是緩慢和過時。除了與舊代碼的兼容性,您不應該使用它。對於新工作,最好使用AES。

+0

+1表示AES – Qwerky