Это 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 не 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.. Есть идеи?

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

2 ответа

Решение

После долгих попыток и поисков, я получил правильный ответ. Проверьте мой вопрос здесь: Безопасность Java: Неверный размер ключа или параметры по умолчанию? если вы испытываете эту проблему!

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

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

Другие вопросы по тегам