我之前问过一个关于这个问题的问题,但它没有得到正确的回答,也没有任何结果。

我已经澄清了这个问题的一些细节,我真的很想听听你的想法,我该如何解决这个问题,或者我应该尝试什么。

我在我的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(密码。DECRYPT_MODE secretKeySpec);

注: * java。服务器的1.6.0.12 Java目录上的安全性与1.6.0.26 Java几乎完全匹配。安全文件。第一个中没有其他提供者。 *前一个问题在这里。


当前回答

我在使用Windows 7 x64、Eclipse和JDK 1.6.0_30时遇到了同样的错误。JDK安装目录下存在“jre”文件夹。当我把前面提到的jar文件添加到JDK的lib/security文件夹时,一开始这让我很困惑。完整路径:

C:\Program Files\Java\jdk1.6.0_30\jre\lib\security

下载这个归档文件的jce文件夹中包含的文件并解压缩到该文件夹中。

其他回答

对于JAVA 7,下载链接是jce-7-download

将下载的两个jar复制到Java\jdk1.7.0_10\jre\lib\security中 为了安全起见,备份一些旧的罐子。

对于JAVA 8,下载链接是jce-8-download 将下载的jar文件复制到Java\jdk1.8.0_45\jre\lib\security中 为了安全起见,备份一些旧的罐子。

从下面的Java 6链接下载JCE文件

https://www.oracle.com/java/technologies/jce-6-download.html

从下面的Java 8链接下载JCE文件

https://www.oracle.com/java/technologies/javase-jce8-downloads.html

复制上述链接中下载的文件,进入JDK安装目录

/Users/ik/jdk1.8.0_72/jre/lib/security

粘贴并替换目录中的文件。重新启动您的应用程序&错误必须解决。

由于美国限制,默认JDK只支持128位密钥加密。 因此,为了支持256位长密钥的加密,我们必须替换local_policy.jar和US_export_policy。在$JAVA_HOME/java-8-oracle/jre/lib/security文件夹中,否则将给出:

invalidkeyexception:非法密钥大小或默认值

你需要去那里

/ jdk1.8.0_152 | / jre | / lib | /安全 | java.security 取消注释

#crypto.policy=unlimited

to

crypto.policy=unlimited

我在使用Windows 7 x64、Eclipse和JDK 1.6.0_30时遇到了同样的错误。JDK安装目录下存在“jre”文件夹。当我把前面提到的jar文件添加到JDK的lib/security文件夹时,一开始这让我很困惑。完整路径:

C:\Program Files\Java\jdk1.6.0_30\jre\lib\security

下载这个归档文件的jce文件夹中包含的文件并解压缩到该文件夹中。