RC4算法的KeyGenerator异常

时间:2012-03-28 12:00:37

标签: java exception-handling cryptography

代码非常简单明了,但它在

处抛出异常
KeyGenerator keyGen = KeyGenerator.getInstance("RC4");

Cipher aesCipher = Cipher.getInstance("RC4");

例外是: 未报告的异常java.security.NoSuchAlgorithmException;必须被捕获或声明被抛出

import java.io.*;
import java.security.*;
import javax.crypto.*;
import sun.misc.BASE64Encoder;


public class RCCC4 {
public static void main(String[] args) {
    String strDataToEncrypt = new String();
    String strCipherText = new String();
    String strDecryptedText = new String();

    try{ 
    KeyGenerator keyGen = KeyGenerator.getInstance("RC4");
    SecretKey secretKey = keyGen.generateKey();
    Cipher aesCipher = Cipher.getInstance("RC4");
    aesCipher.init(Cipher.ENCRYPT_MODE,secretKey);
    strDataToEncrypt = "Hello World of Encryption using RC4 ";
    byte[] byteDataToEncrypt = strDataToEncrypt.getBytes();
    byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt); 
    strCipherText = new BASE64Encoder().encode(byteCipherText);
    System.out.println("Cipher Text generated using RC4 is " +strCipherText);
    aesCipher.init(Cipher.DECRYPT_MODE,secretKey,aesCipher.getParameters());
    byte[] byteDecryptedText = aesCipher.doFinal(byteCipherText);
    strDecryptedText = new String(byteDecryptedText);
    System.out.println(" Decrypted Text message is " +strDecryptedText);
    }
    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);
        }

}
   }

5 个答案:

答案 0 :(得分:3)

代码可以正常运行,只需添加一个捕获来捕获NoSuchAlgorithmException - 这在您的程序中永远不会发生。

因为算法名称是作为String传递的,所以当名称错误时,方法getInstance()可能会抛出NoSuchAlgorithmException。它只是不知道如何处理未知算法。这不是你的情况,但编译器必须确保快乐。

答案 1 :(得分:1)

实际上,this link后面会告诉您KeyGenerator支持RC4,但指定“ARCFOUR”作为算法名称

答案 2 :(得分:1)

尝试使用ARCFOUR代替RC4 documentation is here

答案 3 :(得分:0)

你必须自己做你的功课(请把这个问题标记为btw。)但这里有一个例外的暗示:

A java.security.NoSuchAlgorithmException表示该计算机不支持您要使用的算法(在您的情况下为RC4)。这可能是由于拼写错误(名称可能是rc4或其他内容)或者算法未提供开箱即用,您必须自己实施/添加(我自己假设是这种情况)。

答案 4 :(得分:0)

你只需抓住这个例外就可以解决它......

catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }