使用AES加密解密在windows上使用没有问题,在Linux(Centos6.5)上出现解密失败的解决方法

据网上资料所知,是因为在加密后,因为不同系统环境差异所致解密失败。我把自己解决的方法说一下:

在加密的时候最好用BASE64Encoder去封装一下即可(不封装的话解密的时候会莫名其妙的丢掉加密的字符)。当然这只是本人的解决办法(实验可用)。下面上加密和解密的代码:仅供参考,重点是红色部分。


/**
 * 根据key 加密src
 * @param key
 * @param src
 * @return
 * @throws Exception
 */
   public static String encrypt(String key,byte[] src)throws Exception {
       try {
           KeyGenerator kgen = KeyGenerator.getInstance("AES");
           SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
           secureRandom.setSeed(key.getBytes("UTF-8"));
           kgen.init(128,secureRandom);
           SecretKey secretKey = kgen.generateKey();
           byte[] enCodeFormat = secretKey.getEncoded();
           SecretKey skey=new SecretKeySpec(enCodeFormat,"AES");

           Cipher cipher=Cipher.getInstance("AES");
           cipher.init(Cipher.ENCRYPT_MODE,skey);
           BASE64Encoder encoder = new BASE64Encoder();    //需要加上
           return encoder.encode(cipher.doFinal(src));
       }catch (Exception e) {
           throw new RuntimeException("加密时出现异常!",e);
       }

   }

   /*
    * 根据key解密src
    */
   public static byte[] decrypt(String key,String s)throws Exception{
       try {
           BASE64Decoder decoder = new BASE64Decoder();
           byte[] src = decoder.decodeBuffer(s);
           KeyGenerator kgen = KeyGenerator.getInstance("AES");
           SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
           secureRandom.setSeed(key.getBytes("UTF-8"));
           kgen.init(128,secureRandom);
           SecretKey secretKey = kgen.generateKey();
           byte[] deCodeFormat = secretKey.getEncoded();
           SecretKey secretkey=new SecretKeySpec(deCodeFormat,"AES");
           Cipher cipher=Cipher.getInstance("AES");
           cipher.init(Cipher.DECRYPT_MODE,secretkey);
           return cipher.doFinal(src);
       }catch (Exception e) {
           throw new Exception("解密时出现异常!",e);
       }
   }

你可能感兴趣的:(使用AES加密解密在windows上使用没有问题,在Linux(Centos6.5)上出现解密失败的解决方法)