Исключение KeyGenerator с алгоритмом RC4 - PullRequest
2 голосов
/ 28 марта 2012

Код очень прост и понятен, но он генерирует исключение в

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 ]

3 голосов
/ 28 марта 2012

Код работает и все в порядке, вам просто нужно добавить еще один улов, чтобы поймать NoSuchAlgorithmException - который никогда не произойдет в вашей программе.

Поскольку имя алгоритма передается какa String, метод getInstance() может выдать NoSuchAlgorithmException, если имя неверно.Он просто не знал бы, что делать с неизвестным алгоритмом.Это не ваш случай, но компилятор должен быть обязательно счастлив.

1 голос
/ 28 марта 2012

Попробуйте использовать ARCFOUR вместо RC4 документация здесь

1 голос
/ 28 марта 2012

На самом деле, после эта ссылка скажет вам, что KeyGenerator поддерживает RC4, но в качестве имени алгоритма укажите "ARCFOUR"

0 голосов
/ 28 марта 2012

Вам просто нужно перехватить это исключение, чтобы оно сработало ....

catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
0 голосов
/ 28 марта 2012

Вы должны будете сделать свою домашнюю работу самостоятельно (пожалуйста, пометьте вопрос как таковой), но вот подсказка на исключение:

A java.security.NoSuchAlgorithmException означает, что алгоритм, который вы хотите использовать (в вашем случае RC4), не поддерживается на этом компьютере. Это может быть либо из-за опечатки (имя может быть rc4, либо из-за чего-то другого), либо из-за отсутствия встроенного алгоритма, и вам придется внедрить / добавить его самостоятельно (я полагаю, это дело тут).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...