【问题标题】:AES/CBC/PKCS5Padding Java Encrypting Error - javax.crypto.BadPaddingException: Given final block not properly paddedAES/CBC/PKCS5Padding Java 加密错误 - javax.crypto.BadPaddingException:给定最终块未正确填充
【发布时间】:2013-02-21 09:22:01
【问题描述】:

我正在尝试使用 AES/CBC/PKCS5Padding 对字符串进行加密解密 我收到了这个异常:javax.crypto.BadPaddingException: Given final block not proper padding

我要加密的字符串: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();

我转解密方法如下:aesKey、data和iv

解密代码:

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

谢谢!

【问题讨论】:

  • 你使用了很少被访问的标签,Rotem。我将添加加密...
  • 如果你能跟进你的问题就好了,Rotem。

标签: java encryption aes padding


【解决方案1】:

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

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);
    }
}

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多