javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
出现错误是因为微信小程序encryptedData解密获取手机号失败
贴上解密代码
public static JSONObject decryptData(String sessionKey, String iv, String encryptedData) {
try {
final Cipher cipher = initCipher(Cipher.DECRYPT_MODE, sessionKey, iv);
if (cipher == null) {
return null;
}
final byte[] data = Base64.decode(encryptedData);
final byte[] result = cipher.doFinal(data);
return JSON.parseObject(new String(result, StandardCharsets.UTF_8));
} catch (final Exception e) {
log.warn("wx.decryptData() error", e);
return null;
}
}
public static Cipher initCipher(int mode, String sessionKey, String iv) {
try {
log.debug("sessionKey: {}", sessionKey);
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
final byte[] key = Base64.decode(sessionKey);
final byte[] ivb = Base64.decode(iv);
final SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
final IvParameterSpec ivSpec = new IvParameterSpec(ivb);
cipher.init(mode, skeySpec, ivSpec);
return cipher;
} catch (final Exception e) {
log.warn("wx.initCipher() error", e);
return null;
}
}