[英]Generating digital certificate:InvalidKeyException: Illegal key size
编写代码以生成数字证书
这是导致问题的代码
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)
当我尝试使用异常名称在Internet上搜索时,几乎所有解决方案都说一个解决方案(安装JCE)将以下jar添加到我正在使用的jre
和jdk的安全文件夹中
local_policy.jar
US_export_policy
添加了这些jar并重新启动了我的机器,仍然存在相同的问题并发布。
让我知道是否需要更多详细信息。
谢谢你的时间。
有关非法密钥大小的错误通常是由于策略文件中的限制。 您找到的解决方案是正确的。
您说的是, 已将文件添加到安全文件夹。 添加不正确。 您必须替换它们,因为它们已经存在。 如果您真的添加了它们,那么出了点问题。
此外,请注意Java版本。 当替换为Java 6或Java 7时,策略文件有所不同。
最后但并非最不重要的一点:您可能尚未将策略文件复制到正确的文件夹。 在我的机器上,我同时安装了Java 6和Java 7。 因此,我的程序文件目录包含四个文件夹jdk6,jre6,jdk7,jre7。 jdk6和jdk7文件夹中也存在一个名为jre的文件夹。 您应该替换所有 jre文件夹中的策略文件。
我的磁盘上还有几个嵌入式jre文件夹。 如果您也有此文件...也替换那里的文件。 那可能是一个很好的部署解决方案:添加一个嵌入式JRE,因此您可以替换该JRE中所需的任何文件。
secretKeyFactory.getInstance(String algorithm)其中名称是算法的AND为“ And”,而“ TRIPLEDES”似乎为“ DESede”。 因此,尝试使用PBEWithMD5AndDESede 。
另外,Java(默认情况下)不包含任何实际的实现,它会将请求定向到基础平台,因此它们取决于操作系统支持的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.