最近在做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