您的位置:首页 > 运维架构 > Linux

完美解决Linux(Android)操作系统下aes解密失败的问题

2016-05-31 00:22 495 查看


完美解决Linux操作系统下aes解密失败的问题

作者: 字体:[增加 减小] 类型:转载 时间:2013-08-28 我要评论

以下是针对在Linux操作系统下关于AES解密失败的问题进行了详细的分析介绍,需要的朋友可以过来参考下

现象描述:
windows上加解密正常,linux上加密正常,解密时发生如下异常:

复制代码代码如下:

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.AESCipher.engineDoFinal(DashoA13*..)

       at javax.crypto.Cipher.doFinal(DashoA13*..)

       at chb.test.crypto.AESUtils.crypt(AESUtils.java:386)

       at chb.test.crypto.AESUtils.AesDecrypt(AESUtils.java:254)

       at chb.test.crypto.AESUtils.main(AESUtils.java:40) 

解决方法:
经过检查之后,定位在生成KEY的方法上,如下:

复制代码代码如下:

public static SecretKey getKey (String strKey) {

         try {         

            KeyGenerator _generator = KeyGenerator.getInstance( "AES" );

            _generator.init(128, new SecureRandom(strKey.getBytes()));

                return _generator.generateKey();

        }  catch (Exception e) {

             throw new RuntimeException( " 初始化密钥出现异常 " );

        }

      } 

修改到如下方式,问题解决:


复制代码代码如下:

  public static SecretKey getKey(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) {

             throw new RuntimeException( " 初始化密钥出现异常 " );

        }

      } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: