编写代码以生成数字证书
这是导致问题的一段代码
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并重新启动了我的机器,仍然相同的问题和发布。
如果您需要更多详细信息,请告诉我。
完整代码在这里
谢谢你的时间。
有关非法密钥大小的错误通常是由于策略文件中的限制造成的。您找到的解决方案是正确的。
您说,您已将文件添加到安全文件夹。添加不正确。您必须更换它们,因为它们已经存在。如果你真的添加了它们,那么就有问题了。
此外,请注意 Java 版本。当替换为 Java 6 或 Java 7 时,策略文件会有所不同。
最后但并非最不重要的一点是:您可能没有将策略文件复制到正确的文件夹。在我的机器上,我同时安装了 - Java 6 和 Java 7。所以我的程序文件目录包含四个文件夹jdk6,jre6,jdk7,jre7。名为 jre 的文件夹也存在于 jdk6 和 jdk7 文件夹中。应替换所有 jre 文件夹中的策略文件。
我的磁盘上也有几个嵌入式 jre 文件夹。如果你也有...也替换那里的文件。这可能是一个很好的部署解决方案:添加一个嵌入式 JRE,这样您就可以替换该 JRE 中所需的任何文件。
secretKeyFactory.getInstance(字符串算法(,其中名称为算法,其 AND 为 "And",而 "TRIPLEDES" 似乎是 "DESede"。 所以试试PBEWithMD5AndDESede。
此外,Java(默认情况下(不包含任何实际的实现,它将请求定向到底层平台,因此它们取决于您的操作系统支持的内容。