java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/CBC/PKCS7Padding

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

你可能感兴趣的:(Java基础语言)