最近在做AES-128解密的时候,遇到了这个问题
java.security.NoSuchAlgorithmException:Cannot find any provider
supporting AES/CBC/PKCS7Padding
private byte[] decrypt(byte[] ts) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
SecretKeySpec keySpec = new SecretKeySpec(this.keyByte, "AES");
AlgorithmParameterSpec paramSpec = new IvParameterSpec(this.ivByte);
cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec);
return cipher.doFinal(ts);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
出现这个问题的原因是:java自带的是PKCS5Padding填充,不支持PKCS7Padding填充。
解决办法:添加静态代码块,通过BouncyCastle组件来让java里面支持PKCS7Padding填充
/**
* 解决java不支持AES/CBC/PKCS7Padding模式解密
*/
static {
Security.addProvider(new BouncyCastleProvider());
}
环境JDK8