AES 解密是报错 求大神解答

qq_38691224 2017-07-14 09:31:33
AES 解密是报错 Given final block not properly padded


package com.core.tools;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class AESCrypt {

/*
* 加密
*
// */
public String encrypt(String content, String password) throws Exception {
// try {
System.out.println(content);
System.out.println("传入的明文:" + content);
// System.out.println("传入的密钥:" + password);
// KeyGenerator提供对策密钥生成器的功能,支持各种算法
KeyGenerator kgen = KeyGenerator.getInstance("AES");
// KeyGenerator kgen = KeyGenerator.getInstance("AES/ECB/PKCS5Padding");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(password.getBytes());
kgen.init(128, secureRandom);
// SecretKey 负责保存对称密钥
SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
// System.out.println("转换后的密钥:" + key.getEncoded());
// 创建密码器
Cipher cipher = Cipher.getInstance("AES");
byte[] byteContent = content.getBytes("utf-8");
// System.out.print("明文转utf-8后的byte:");
// for (int i = 0; i < byteContent.length; i++) {
// System.out.print(byteContent[i] + " ");
// }
// 初始化
cipher.init(Cipher.ENCRYPT_MODE, key);
// 加密
byte[] result = cipher.doFinal(byteContent);
// return parseByte2HexStr(result);
// System.out.print("加密后的byte:");
// for (int i = 0; i < result.length; i++) {
// System.out.print(result[i] + " ");
// }
// System.out.println("加密后的:"
// + (new sun.misc.BASE64Encoder()).encode(result));
String ti = (new sun.misc.BASE64Encoder()).encode(result);
System.out.println(ti);
return ti;
// } catch (NoSuchAlgorithmException e) {
// e.printStackTrace();
// } catch (NoSuchPaddingException e) {
// e.printStackTrace();
// } catch (InvalidKeyException e) {
// e.printStackTrace();
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// } catch (IllegalBlockSizeException e) {
// e.printStackTrace();
// } catch (BadPaddingException e) {
// e.printStackTrace();
// }
// return new String();
}

/*
* 注意:解密的时候要传入byte数组 解密 @param content 待解密内容 @param password 解密密钥 @return
*/
// public String decrypt(byte[] content, String password) {
public String decrypt(String contentStr, String password) throws Exception {
System.out.println(contentStr);
// try {
byte[] content = (new sun.misc.BASE64Decoder())
.decodeBuffer(contentStr);
// for (int i = 0; i < content.length; i++) {
// System.out.print(content[i]);
// }
System.out.println(contentStr);
System.out.println(password);
KeyGenerator kgen = KeyGenerator.getInstance("AES");
// KeyGenerator kgen = KeyGenerator.getInstance("AES/ECB/PKCS5Padding");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(password.getBytes());
kgen.init(128, secureRandom);
SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance("AES");
// 初始化
cipher.init(Cipher.DECRYPT_MODE, key);
// 加密
byte[] result = cipher.doFinal(content);
System.out.println(new String(result));
return new String(result);
// } catch (NoSuchAlgorithmException e) {
// e.printStackTrace();
// } catch (NoSuchPaddingException e) {
// e.printStackTrace();
// } catch (InvalidKeyException e) {
// e.printStackTrace();
// } catch (IllegalBlockSizeException e) {
// e.printStackTrace();
// } catch (BadPaddingException e) {
// e.printStackTrace();
// } catch (Exception e) {
// e.printStackTrace();
// }
// return new String();
}

public static void main(String[] args) throws Exception {
String content = "11122233aaaaaaaaaa|aaaaaaaaaaaaaaaaaaaaaaaaa3";
String pwd = "123";
AESCrypt ac = new AESCrypt();
String afterEDS = ac.encrypt(content, pwd);
System.out.println(ac.decrypt(afterEDS, pwd));

}
}
...全文
317 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shpery 2017-07-14
  • 打赏
  • 举报
回复
是不是JAR包版本问题,我之前遇到类似问题是版本问题
qq_38691224 2017-07-14
  • 打赏
  • 举报
回复
但是我在本地代码测试是好用的,就是生成秘钥用服务器解密用本地代码就报这个错

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧