异常:
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded代码:
public static String getSignPhone(String encryptedData,String iv,String js_code) throws Exception {
String sessionId = "";
Map<String, Object> resultMap = WechatPayService.findOpenid(js_code);
if(resultMap != null){
sessionId = resultMap.get("session_key").toString();
}
byte[] encrypData = Base64.decodeBase64(encryptedData);
byte[] ivData = Base64.decodeBase64(iv);
byte[] sessionKey = Base64.decodeBase64(sessionId);
String decrypt = decrypt(sessionKey,ivData,encrypData);
System.out.println(decrypt);
if(decrypt == null){
return creatResult(1, "解析错误",null ).toString();
}
JSONObject parse = (JSONObject) JSONObject.parse(decrypt);
return (String) parse.get("phoneNumber");
}
public static String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
//解析解密后的字符串
return new String(cipher.doFinal(encData),"UTF-8");
}
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded代码:
public static String getSignPhone(String encryptedData,String iv,String js_code) throws Exception {
String sessionId = "";
Map<String, Object> resultMap = WechatPayService.findOpenid(js_code);
if(resultMap != null){
sessionId = resultMap.get("session_key").toString();
}
byte[] encrypData = Base64.decodeBase64(encryptedData);
byte[] ivData = Base64.decodeBase64(iv);
byte[] sessionKey = Base64.decodeBase64(sessionId);
String decrypt = decrypt(sessionKey,ivData,encrypData);
System.out.println(decrypt);
if(decrypt == null){
return creatResult(1, "解析错误",null ).toString();
}
JSONObject parse = (JSONObject) JSONObject.parse(decrypt);
return (String) parse.get("phoneNumber");
}
public static String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
//解析解密后的字符串
return new String(cipher.doFinal(encData),"UTF-8");
}
解决方案 »
- 求axis xfire OSGI实现
- java打包zip文件问题
- 在线等,非常郁闷中jsp调用不了css
- struts1+ibatis 奇怪的问题 service层测试通过了 action里执行报错
- SSH整合中遇到问题,请高手指点!
- 为什么老是中文出问题
- 如何找到SSH架构的项目源码
- 求助论坛的朋友了
- 请教几个有关struts的问题,谢谢.
- 关于JDBC的效率问题,有这么做过的朋友看看,给点意见
- java.lang.IllegalStateException 的问题
- 严重: Servlet.service() for servlet [jsp] in context with path [/hotelmanagementsy
https://stackoverflow.com/questions/8049872/given-final-block-not-properly-padded
https://community.apigee.com/questions/38083/javaxcryptobadpaddingexception-given-final-block-n.html