我被困在代码中的错误中,它不会让我正确解密!
我只将八个字节的数据传递到dataBytes而我正在传递
一个24字节的keyBytes密钥。
我试图将解密后的数据作为字节数组返回。
我不断收到错误的填充异常。

谢谢!

这是代码片段:

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;

最佳答案

您必须使用与加密相同的填充进行解密。最好是显式设置它,而不要依赖默认值。最好同时指定两端的模式:

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


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

10-04 09:56
查看更多