代码非常简单明了,但它在
处抛出异常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);
}
}
}
答案 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();
}