AES解密异常Given final block not properly padded-在线助手博客

AES 128/192/256位CBC/CFB/ECB/OFB/PCBC 在线加密解密

解密内容:1243CFEBD819AA6B1C717DE870459F7B

秘钥:http://www.it399.com

没有使用填充向量iv

AES解密异常Given final block not properly padded

javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
    at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
    at javax.crypto.Cipher.doFinal(Cipher.java:2165)

原因: 解密的时候直接对输入的16进制值 1243CFEBD819AA6B1C717DE870459F7B 取getBytes了,这样获取到的字节数组长度是16,不能直接这样操作

inputValue.getBytes(AESUtil.CHARSET)

需要将16进制转字节数组,这样获取到的内容是32位,而且和之前直接获取到的字节数组不一样。

TypeConvert.hexStringToBytes(inputValue)

16进制转字节数组方法

/**
     * Convert hex string to byte[]
     *
     * @param hexString the hex string
     * @return byte[]
     */
    public static byte[] hexStringToBytes(String hexString) {
        if (hexString == null || hexString.equals("")) {
            return null;
        }
        hexString = hexString.toUpperCase();
        int length = hexString.length() / 2;
        char[] hexChars = hexString.toCharArray();
        byte[] d = new byte[length];
        for (int i = 0; i < length; i++) {
            int pos = i * 2;
            d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
        }
        return d;
    }

这样解密之后的字符串是 在线助手 正常!!

还有一种情况是输入的字符串不正常不能解密!

相关文章

AES 128/192/256位CBC/CFB/ECB/OFB/PCBC加密解密

http://www.it399.com/blog/web/201805211243

AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作

http://www.it399.com/aes

AES解密异常Given final block not properly padded

http://www.it399.com/blog/web/201805211406

本文同步发布在 在线助手博客|在线助手|在线工具|在线生成|在线制作转载请注明来自 在线助手博客 频道【AES解密异常Given final block not properly padded】,原文链接:**http://www.it399.com/blog/web/201805211406**

原文地址:https://www.cnblogs.com/chenshouyin/p/9076257.html

时间: 2024-10-03 23:57:03

AES解密异常Given final block not properly padded-在线助手博客的相关文章

javax.crypto.BadPaddingException: Given final block not properly padded解决方案

JAVA的AES加密解密在windows上测试一切正常,上传到空间上在解密时就出现错误.空间是Linux系统 查看日志发现出现此异常 javax.crypto.BadPaddingException: Given final block not properly padded 后面百度了一下终于解决了,在生成key的时候出现错误的 原来的代码: private Key initKeyForAES(String key) throws NoSuchAlgorithmException { if (

javax.crypto.BadPaddingException: Given final block not properly padded

异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填充算法(也就是说,是否都是使用PKCS5Padding)2)确认下你要解密的字节数组是否正确. javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded

Java 之 Given final block not properly padded

获取Cipher对象的时候一定要写成 Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); 不要写成 Cipher cipher = Cipher.getInstance("DES"); 否则解密的时候会报错: Given final block not properly padded 原因是Cipher cipher = Cipher.getInstance("DES");与Ciphe

javax.crypto.BadPaddingException: Given final block not properly padded 解决方法

下面的 Des 加密解密代码,在加密时正常,但是在解密是抛出错误: javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.DESCipher.engin

记一次文件编码出现的BUG javax.crypto.BadPaddingException: Given final block not properly padded

1.前景:工作中需要实现一个功能,导出的数据需要加密,不能被明文看到,使用DES加密,对byte数组加密解密操作代码如下 public class DESTool { static String transformation = "DESede/ECB/PKCS5Padding"; static String algorithm = "DESede"; public byte[] decode(byte[] srcByte, byte[] keyByte, int

解决Linux下AES解密失败

前段时间,用了个AES加密解密的方法,详见上篇博客AES加密解密.加解密方法在window上测试的时候没有出现任何问题,将加密过程放在安卓上,解密发布到Linux服务器的时候,安卓将加密的结果传到Linux上解密的时候却总是失败,让用户不能成功登录,经过检查,测试后,发现AES在Linux上解密失败,出现错误: javax.crypto.BadPaddingException: Given final block not properly padded 现在来回顾下自己的解决思路: 加密过程是在

原创:微信小程序java实现AES解密并获取unionId

来自:微信小程序联盟 如果大家使用小程序的同时还在使用公众号的话,可能会用到unionId这种功能,由于公司业务需要,我们需要使用unionId,具体使用方法,请参考微信开放平台的说明,但是在微信小程序的文档中只给出了部分语言实现的源码,竟然没有java的,小程序的开发人员是有多么懒.难道大家都不用java写后台??? 什么鬼,然后开始了各种AES踩坑之路,其实参考了很多的网上的教程,再次不能一一列出来给大家了,(因为我写这篇文章的时候,已经是解决问题一周以后了),也收到管理员的很多帮助,再次写

android 开发解密是出现pad block corrupted 错误

情景:在虚拟机上运行正常的,但是到我的真机上就解密失败,出现pad block corrupted  ,据说是版本原因:我机器是小米3 最新版的android  4.2 出现问题的代码: private static byte[] getRawKey(byte[] seed) throws Exception {        KeyGenerator kgen = KeyGenerator.getInstance("AES");        //SecureRandom sr =

android系统AES解密服务器加密数据错误解决方案

之前的做了一个外包项目,里边有一些敏感的信息需要AES加密,但是同样的代码在服务器就可以加密解密,在android系统中就解密失败,会出现pad block corrupted错误,下面给出解决方案, 亲测无问题! AES.java public class AES { public static final String VIPARA = "0123456789abcdef"; public static final String bm = "UTF-8"; pu