繁体   English   中英

生成数字证书:InvalidKeyException:密钥大小非法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM