Java加密:NoSuchAlgorithmException错误

时间:2016-09-14 07:10:10

标签: java security encryption cryptography

我正在尝试使用 AES加密和解密加密某些数据。在那里,我创建了一个带有以下参数的Cipher

算法名称 - AES

模式 - CBC模式

填充 - PKCS7

Cipher aesCipherForEncryption = Cipher.getInstance("AES/CBC/PKCS7PADDING");

当我运行加密代码时抛出异常。

No Such Algorithm exists java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/CBC/PKCS7Padding.

这是我的源代码,

    String strDataToEncrypt = new String();
    String strCipherText = new String();
    String strDecryptedText = new String();

    try {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128);
        SecretKey secretKey = keyGen.generateKey();

        final int AES_KEYLENGTH = 128;  
        byte[] iv = new byte[AES_KEYLENGTH / 8];    
        SecureRandom prng = new SecureRandom();
        prng.nextBytes(iv);

        Cipher aesCipherForEncryption = Cipher.getInstance("AES/CBC/PKCS7PADDING");

        aesCipherForEncryption.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));

        strDataToEncrypt = "Hello World of Encryption using AES ";
        byte[] byteDataToEncrypt = strDataToEncrypt.getBytes();
        byte[] byteCipherText = aesCipherForEncryption.doFinal(byteDataToEncrypt);

        strCipherText = new BASE64Encoder().encode(byteCipherText);
        System.out.println("Cipher Text generated using AES is " + strCipherText);


        Cipher aesCipherForDecryption = Cipher.getInstance("AES/CBC/PKCS7PADDING"); 

        aesCipherForDecryption.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
        byte[] byteDecryptedText = aesCipherForDecryption.doFinal(byteCipherText);
        strDecryptedText = new String(byteDecryptedText);

        System.out.println(" Decrypted Text message is " + strDecryptedText);

    } catch (NoSuchAlgorithmException noSuchAlgo) {
        System.out.println(" No Such Algorithm exists " + noSuchAlgo);
    } catch (NoSuchPaddingException noSuchPad) {
        System.out.println(" No Such Padding exists " + noSuchPad);
    } catch (InvalidKeyException invalidKey) {
        System.out.println(" Invalid Key " + invalidKey);
    } catch (BadPaddingException badPadding) {
        System.out.println(" Bad Padding " + badPadding);
    } catch (IllegalBlockSizeException illegalBlockSize) {
        System.out.println(" Illegal Block Size " + illegalBlockSize);
    } catch (InvalidAlgorithmParameterException invalidParam) {
        System.out.println(" Invalid Parameter " + invalidParam);
    }

但这与 PKCS5 一起使用Cipher

中的相同参数

有任何想法吗?

1 个答案:

答案 0 :(得分:1)

documentation开始,不支持提及的填充PKCS7

您可以参考此answer了解更多信息