java - 生成数字证书:InvalidKeyException: Illegal key size

标签 java security digital-certificate

编写代码生成数字证书

这是导致问题的代码段

 PBEKeySpec keySpec = new PBEKeySpec(password);

 SecretKeyFactory keyFactory = SecretKeyFactory
        .getInstance("PBEWITHMD5ANDTRIPLEDES"/* "PBEWithSHAAndTwofish-CBC" */);

 SecretKey key = keyFactory.generateSecret(keySpec);

 PBEParameterSpec paramSpec = new PBEParameterSpec(salt,
                    MD5_ITERATIONS);

Cipher cipher = Cipher.getInstance("PBEWITHMD5ANDTRIPLEDES");
            cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);//here Ex.

byte[] ciphertext = cipher.doFinal(plaintext); 

面对异常

java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1023)
    at javax.crypto.Cipher.implInit(Cipher.java:789)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:848)
    at javax.crypto.Cipher.init(Cipher.java:1347)
    at javax.crypto.Cipher.init(Cipher.java:1281)
    at chapter4.GenSig.passwordEncrypt(GenSig.java:290)
    at chapter4.GenSig.generateKeyPair(GenSig.java:92)
    at chapter4.GenSig.main(GenSig.java:48)

当我尝试使用异常名称在互联网上搜索时,几乎所有解决方案都说一个解决方案(安装 JCE)jre 和 jdk 的安全文件夹中添加以下 jar我正在使用

local_policy.jar
US_export_policy

添加了这些 jar 并重新启动了我的机器,仍然存在相同的问题和发布。

如果您需要更多详细信息,请告诉我。

FULL CODE HERE

感谢您的宝贵时间。

最佳答案

有关非法 key 大小的错误通常是由于策略文件中的限制造成的。您找到的解决方案是正确的。

您说过,您已将文件添加到安全文件夹中。添加不正确。您必须更换它们,因为它们已经存在。如果你真的添加了它们,那就出问题了。

此外,请注意 Java 版本。当替换为 Java 6 或 Java 7 时,策略文件会有所不同。

最后但并非最不重要的一点是:您可能没有将策略文件复制到正确的文件夹。在我的机器上,我安装了 Java 6 和 Java 7。所以我的program files目录包含四个文件夹jdk6、jre6、jdk7、jre7。 jdk6和jdk7文件夹中还存在一个名为jre的文件夹。您应该替换所有 jre 文件夹中的策略文件。

我的磁盘上还有几个嵌入式 jre 文件夹。如果你也有...也替换那里的文件。这可能是一个很好的部署解决方案:添加嵌入式 JRE,这样您就可以替换该 JRE 中所需的任何文件。

关于java - 生成数字证书:InvalidKeyException: Illegal key size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247140/

相关文章:

java - 如何从外部存储目录输出不带扩展名的文件?

java - 使用 FormToolkit,如何在 swt 浏览器小部件上设置边框?

security - 两方加密如何工作?

git - 在 Windows 7 上使用 git 的 GitHub 的 https 证书错误

release - 我应该对 JSON.NET 等第三方 DLL 进行数字签名吗?

java - Shiro 和 Tomcat AccessLogValve

java - Activity 启动时的默认 fragment

security - 如何唯一标识一个网络?

从 HTTPS 服务器运行的 Java Web Start 应用程序被 Java 安全性阻止

ssl的java安全配置