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



我的代码被一个bug卡住了,它不能让我正确解密!我只传递了8个字节的数据给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。

最新更新