Это RC4 или ARCFOUR? InvalidKeyException при использовании SecretKeySpec?

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

fabsam.crypto.CryptoException: java.security.InvalidKeyException: No installed provider supports this key: javax.crypto.spec.SecretKeySpec
    at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:37) ~[bin/:na]
    ... (skipped my projects stack trace)
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_25]
Caused by: java.security.InvalidKeyException: No installed provider supports this key: javax.crypto.spec.SecretKeySpec
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:27) ~[bin/:na]
    ... 5 common frames omitted

Caused by: java.security.InvalidKeyException: No installed provider supports this key: javax.crypto.spec.SecretKeySpec
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:25) ~[fabsam-08.05.11.jar:na]
    ... 5 common frames omitted

код:

cipher.init(Cipher.DECRYPT_MODE,
                    new SecretKeySpec(key.getBytes(DEFAULT_CHARSET), ALGORITHM));

Может быть, потому, что я использую RC4 not ARCFOUR в переменной ALGORITHM? Когда я пытаюсь ARCFOUR, я получаю следующее:

fabsam.crypto.CryptoException: java.security.InvalidKeyException: Illegal key size or default parameters
    at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:37) ~[bin/:na]
    ... (skipped my projects stack trace)
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_25]
Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at fabsam.crypto.RC4Decoder.decode(RC4Decoder.java:27) ~[bin/:na]
    ... 5 common frames omitted

Хорошо, проблема не в коде. На сервере это работает отлично, без ошибок. Однако на моем компьютере это бросает мне исключение InvalidKeyException. Так что-то с jvm связано.. Любые идеи?

Edit: Теперь я вижу, что получаю оба исключения. Не сразу, но в первый раз - размер нелегального ключа, а затем нет установленного провайдера. У меня установлен ALGORITHM в "ARCFOUR" при запуске моего проекта.

Ответы

Ответ 2

Как упоминалось в @DaveHowes, вероятно, вы используете сторонний провайдер JCE в случае первого stacktrace и что ваш ключ недействителен в случае второго stacktrace.

Sun включает несколько поставщиков, параметры которых документированы здесь. Обратите внимание, что согласно документации для поставщика SunJCE, имя алгоритма - "ARCFOUR" , а не "RC4". Я предполагаю, что когда вы указали "RC4", вы получили реализацию поставщика "fabsam", что бы это ни было. Когда вы указали "ARCFOUR", вы получили реализацию Sun. Также обратите внимание на ограничения на ключи, которые указывают, что "ARCFOUR" должен иметь ключ от 40 бит до 1024 бит включительно (это 5 байтов и 128 байтов включительно). Объект String key в вашей программе может быть слишком маленьким или слишком большим, пожалуйста, проверьте это.