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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值