【发布时间】:2011-09-22 19:45:06
【问题描述】:
我之前曾问过一个关于这个的问题,但没有得到正确的回答,而且没有任何结果。
所以我已经澄清了一些关于这个问题的细节,我真的很想听听你关于如何解决这个问题或我应该尝试什么的想法。
我在我的 Linux 服务器上安装了 Java 1.6.0.12,下面的代码运行良好。
String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
Cipher c = Cipher.getInstance("ARCFOUR");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");
} catch (InvalidKeyException e) {
throw new CryptoException(e);
}
今天我在我的服务器用户上安装了 Java 1.6.0.26,当我尝试运行我的应用程序时,出现以下异常。我的猜测是它与Java安装配置有关,因为它在第一个版本中有效,但在更高版本中无效。
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 my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
... 5 common frames omitted
第 25 行 是:
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
注意事项:
* 服务器的 1.6.0.12 java 目录上的 java.security 几乎与 1.6.0.26 java.security 文件完全匹配。第一个中没有其他提供者。
* 上一个问题是here。
【问题讨论】:
-
这也可能在 Java 8 中抛出错误:
Caused by: java.security.InvalidKeyException: Illegal key size(没有“或默认参数”) -
只要使用 OpenJDK 就可以了。
-
@RodrigoAsensio :我正在使用 OpenJDK,但它无法使用它。您必须安装无限的强度管辖政策文件 jar 文件。然后它就会起作用。
-
更新到@AniketThakur 答案。从 Java 9 和 Java 8u151 开始,不再需要下载和手动安装管辖策略文件。要启用无限加密,可以使用新的 crypto.policy 安全属性。如果在 java.security 文件中设置了新的 Security 属性 (crypto.policy),或者在初始化 JCE 框架之前使用 Security.setProperty() 调用动态设置了该设置,则将采用该设置。默认情况下,该属性是未定义的。
标签: java