天天看點

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

繼續閱讀