我之前问过一个关于这个问题的问题,但是没有得到正确的回答,什么也没有得到。
所以我已经澄清了这个问题的一些细节,我真的很想听听你的想法,关于我如何解决这个问题,或者我应该尝试什么。
我在我的服务器上安装了LinuxJava1.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);
}
今天我在我的服务器用户上安装了Java1.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。
发布于 2011-06-26 09:48:30
很可能你现在还没有安装无限强度文件。
您可能需要下载此文件:
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download (仅Java8 u162之前的版本需要)
从压缩包中提取jar文件,并将它们保存在${java.home}/jre/lib/security/
中。
发布于 2014-04-24 05:11:11
可以在以下位置找到JRE/JDK/Java 8辖区文件:
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download
就像詹姆斯上面说的:
在${java.home}/jre/lib/security/
中安装文件。
发布于 2017-10-21 05:38:48
对于Java9、Java 8u161、Java 7u171和Java 6u181,这一限制现在默认情况下是禁用的。参见issue in Java Bug Database。
从Java 8u151开始,您可以通过编程方式禁用此限制。
在较早的版本中,必须单独下载和安装
辖区文件,以允许JDK使用无限制的加密。下载和安装步骤不再是必需的。
相反,您现在可以在第一次使用JCE类之前调用以下代码行(即,最好在应用程序启动后立即调用):
Security.setProperty("crypto.policy", "unlimited");
https://stackoverflow.com/questions/6481627
复制相似问题