尝试解密使用GNUPG加密的文件时,我有一些误解。
尝试使用此处提供的示例代码:
https://github.com/chids/bouncy-castle-pgp
进行了一些额外的测试,一切正常。
但是当试图解密样本文件时,我得到:
Caused by: java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024)
at javax.crypto.Cipher.init(Cipher.java:1345)
at javax.crypto.Cipher.init(Cipher.java:1282)
... 4 more
据我所知,我需要更换两个位于jdk安全文件夹中的jar文件,我这样做但仍然存在此异常。
当检查所有算法的Cipher.getMaxAllowedKeyLength()时,我得到的主要是128位长度。我认为这不正确,是吗?也许jar文件需要以某种方式单独添加到我的IDE上?
我看到提供的公钥是RSA 2048位,所以这些实现可能需要以其他方式完成吗?
编辑: 刚刚注意到单元测试中使用的密钥也是RSA 2048位,所以不应该这样。
答案 0 :(得分:3)
默认情况下,从Oracle网站下载的Java包含限制您可以使用的最大密钥长度的策略文件。这是jre / lib / security / local_policy.jar中default_local.policy的相关部分:
grant {
permission javax.crypto.CryptoPermission "DES", 64;
permission javax.crypto.CryptoPermission "DESede", *;
permission javax.crypto.CryptoPermission "RC2", 128,
"javax.crypto.spec.RC2ParameterSpec", 128;
permission javax.crypto.CryptoPermission "RC4", 128;
permission javax.crypto.CryptoPermission "RC5", 128,
"javax.crypto.spec.RC5ParameterSpec", *, 12, *;
permission javax.crypto.CryptoPermission "RSA", *;
permission javax.crypto.CryptoPermission *, 128;
};
正如您所看到的,对于RSA,密钥长度根本不受限制,但最后一行使其他所有内容最大为128位。来自UnlimitedJCEPolicy.zip的local_policy.jar将其替换为:
grant {
// There is no restriction to any algorithms.
permission javax.crypto.CryptoAllPermission;
};
删除限制。您的非法密钥大小异常表示您没有替换正确目录中的文件,或者您的IDE未使用具有正确安全策略文件的JRE。您还没有告诉我们您正在使用哪个IDE。如果是Eclipse,请转到Window-> Preferences-> Java-> Installed JREs ...并查看JRE列表。如果未列出您替换的那个,请单击添加...,然后选择标准VM,然后将JRE主目录设置为已修补Java所在的目录。完成后,您应该能够使用修补的Java运行测试。
答案 1 :(得分:2)
底层代码可能使用带有256位密钥的AES,默认的Java安全策略不允许这样做(由于美国的出口法律)。
要解决此问题,您可以为JCE安装无限制的策略文件。
从以下网址下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html