1

我一直被困在我的代码中的一个错误上,它不会让我正确解密!我只向 dataBytes 传递了 8 个字节的数据,并且向 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;
4

1 回答 1

1

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

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

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

于 2011-07-27T15:29:40.583 回答