AES - 异常总结

简介: AES - 异常总结

【1】javax.crypto.BadPaddingException: Given final block not properly padded


背景 : windows加密解密正常,windows加密linux解密出错,linux加密,windows解密出错。同一个明文,使用AES加密中的方法,windows和linux下加密结果不同。


解决办法:将SecretKey替换为如下

      /* 解决windows与linux相互加密解密出错 */
    public static SecretKey generateSKey(String strKey){
        try {
             KeyGenerator generator = KeyGenerator.getInstance( "AES" );  
             SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );  
            secureRandom.setSeed(strKey.getBytes());  
            generator.init(128,secureRandom);  
            return generator.generateKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }



调整后加密示例如下:

/**  /**
         * [加密]<BR>
         *base64(aes(src,key))
         */
        public static String encryptBase64(String sSrc, String sKey) throws Exception {
            if (sKey == null) {
                return null;
            }
            // 判断Key是否为16位
            if (sKey.length() != 16) {
                return null;
            }
            // 返回实现指定算法的密码对象实例
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            // 根据key产生指定算法的秘钥
           // byte[] raw = sKey.getBytes();
           //SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            SecretKey generateSKey = generateSKey(sKey);
            IvParameterSpec iv = new IvParameterSpec(IV_INIT.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, generateSKey , iv);
            byte[] encrypted = cipher.doFinal(sSrc.getBytes());
            //此处使用BASE64做转码功能,同时能起到2次加密的作用。
            return Base64Util.encode(encrypted);
        }
目录
相关文章
|
Linux 数据安全/隐私保护 Windows
AES在windows下正常加解密,Linux下加密正常,解密异常(javax.crypto.BadPaddingException: pad block co
AES在windows下正常加解密,Linux下加密正常,解密异常(javax.crypto.BadPaddingException: pad block co
678 1
|
算法 数据库 数据安全/隐私保护
rsa加密解密,使用rsa对密码加密
rsa加密解密,使用rsa对密码加密
浅谈判空注解(@NotNull与@NotBlank)
浅谈判空注解(@NotNull与@NotBlank)
585 0
|
Java
【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)
【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)
1722 0
|
算法 Java 测试技术
Java实现AES ECP PKCS5Padding加解密工具类
Java 实现一个AES/ECB/PKCS5Padding 加解密算法工具类 加密算法: AES 模式: ECB 补码方式: PKCS5Padding
1080 0
Java实现AES ECP PKCS5Padding加解密工具类
|
Android开发
Android笔记: AES解密报错javax.crypto.BadPaddingException: pad block corrupted
Android笔记: AES解密报错javax.crypto.BadPaddingException: pad block corrupted
3543 0
|
关系型数据库 MySQL Java
解决问题:java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowe
解决问题:java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowe
3580 0
|
算法 Java
Java使用Cipher.getInstance(“AES/ECB/PKCS5Padding“);加解密算法工具类实现
Java使用Cipher.getInstance(“AES/ECB/PKCS5Padding“);加解密算法工具类实现
1403 0
Java SpringBoot集成WebSocket根据登陆权限认证
Java SpringBoot集成WebSocket根据登陆权限认证
|
JSON 缓存 安全
SpringBoot 配置CORS处理前后端分离跨域配置无效问题解析
SpringBoot 配置CORS处理前后端分离跨域配置无效问题解析