使用des ede,javax.crypto.badpaddingexception解密错误

时间:2011-07-27 15:20:32

标签: java encryption cryptography padding des

我的代码中一直存在错误,它不会让我正确解密! 我只传递8个字节的数据到dataBytes,我正在传递 keyBytes的24字节键。 我试图将解密的数据作为字节数组返回。 我不断得到糟糕的填充异常。

谢谢!

以下是代码段:

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;

1 个答案:

答案 0 :(得分:1)

您必须使用相同的填充来解密,就像加密一样。最好是明确设置它而不是依赖默认值。最好也指定两端的模式:

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

DESede缓慢且过时。除了与旧代码的兼容性之外,您不应该使用它。对于新工作,最好使用AES。