AES/CBC/PKCS5P添加Java加密错误-javax.crypto.BadPaddingException:给定的最终块未正确填充

AES/CBC/PKCS5P添加Java加密错误-javax.crypto.BadPaddingException:给定的最终块未正确填充,java,encryption,aes,padding,Java,Encryption,Aes,Padding,我正在尝试使用AES/CBC/PKCS5P对字符串进行加密解密 我得到了这个异常:javax.crypto.BadPaddingException:给定的最后一个块没有正确填充 我试图加密的字符串:ftp.clarapoint.com 这是我的加密代码: cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, aesKey); byte[] data = ciphe

我正在尝试使用AES/CBC/PKCS5P对字符串进行加密解密 我得到了这个异常:javax.crypto.BadPaddingException:给定的最后一个块没有正确填充

我试图加密的字符串:ftp.clarapoint.com

这是我的加密代码:

cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] data = cipher.doFinal(stringDec.getBytes());
byte[] iv = cipher.getIV();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
AlgorithmParameters.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
byte[] decrypted = cipher.doFinal(data);
我将按照以下方式传输解密方法:aesKey、data和iv

解密代码:

cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] data = cipher.doFinal(stringDec.getBytes());
byte[] iv = cipher.getIV();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
AlgorithmParameters.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
byte[] decrypted = cipher.doFinal(data);

谢谢

您没有正确传输密钥或密码文本,因为此代码正在运行:

private static void testCode() {
    try {
        String stringDec = "Hi there";
        SecretKey aesKey = new SecretKeySpec(new byte[16], "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);

        // no encoding given, don't use getBytes() without a Charset.forName("UTF-8")
        byte[] data = cipher.doFinal(stringDec.getBytes());
        byte[] iv = cipher.getIV();

        // doesn't do anything
        AlgorithmParameters.getInstance("AES");

        cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
        byte[] decrypted = cipher.doFinal(data);
        System.out.println(new String(decrypted));
    } catch (GeneralSecurityException e) {
        throw new IllegalStateException(e);
    }
}

您没有正确传输密钥或密码文本,因为此代码确实在运行:

private static void testCode() {
    try {
        String stringDec = "Hi there";
        SecretKey aesKey = new SecretKeySpec(new byte[16], "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);

        // no encoding given, don't use getBytes() without a Charset.forName("UTF-8")
        byte[] data = cipher.doFinal(stringDec.getBytes());
        byte[] iv = cipher.getIV();

        // doesn't do anything
        AlgorithmParameters.getInstance("AES");

        cipher.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
        byte[] decrypted = cipher.doFinal(data);
        System.out.println(new String(decrypted));
    } catch (GeneralSecurityException e) {
        throw new IllegalStateException(e);
    }
}

你使用了很少的访问标签,Rotem。我会添加加密…如果你继续问你的问题,那就太好了,Rotem。你使用了很少的访问标签,Rotem。我会添加加密…如果你能继续回答你的问题,那就太好了,Rotem。