是RC4还是ARCFOUR?使用SecretKeySpec时出现InvalidKeyException?

时间:2011-05-08 19:20:24

标签: java cryptography rc4-cipher

我尝试在我的电脑上运行我的应用程序,但我不断得到这个东西。我有可能错过一些图书馆吗?

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));

可能是因为我在ALGORITHM变量中使用RC4而不是ARCFOUR吗? 当我尝试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 个答案:

答案 0 :(得分:0)

正如@DaveHowes所提到的,在第一个堆栈跟踪的情况下,您可能正在使用第三方JCE提供程序,并且在第二个堆栈跟踪的情况下,您的密钥大小无效。

Sun包括几个提供参数的提供商here。请注意,根据documentation for the SunJCE provider,算法的名称是“ARCFOUR”,而不是“RC4”。我的猜测是,当你指定“RC4”时,你得到了'fabsam'提供程序实现,不管是什么。当您指定'ARCFOUR'时,您将获得Sun实施。另请注意,键大小限制指定'ARCFOUR'必须具有40位和1024位之间的密钥大小(包括5个字节和128个字节)。程序中的String对象key可能太小或太大,请检查一下。

答案 1 :(得分:0)

经过大量的挣扎和搜索以及一切,我得到了正确的答案。 如果您遇到此问题,请在此处查看我的问题:Java Security: Illegal key size or default parameters?