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

时间:2013-10-08 12:00:53

标签: 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 i'的安全文件夹中添加以下jars使用

local_policy.jar
US_export_policy

添加了那些jar并重新启动了我的机器,仍然是同样的问题和发布。

如果您需要更多详细信息,请与我们联系。

FULL CODE HERE

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

secretKeyFactory.getInstance(字符串算法),其中名称为algorithm,AND为“And”,“TRIPLEDES”似乎为“DESede”。所以尝试 PBEWithMD5AndDESede

此外,Java(默认情况下)不包含将请求指向底层平台的任何实际实现,因此它们依赖于操作系统支持的内容。