2011-07-27 35 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