Это 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
в вашей программе может быть либо слишком маленьким или слишком большим, пожалуйста, проверьте это.