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

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

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

在加密的时候最好用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解密Linux失败