充气城堡GNUPG解密

时间:2014-07-28 08:58:55

标签: java encryption bouncycastle gnupg

尝试解密使用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位,所以不应该这样。

2 个答案:

答案 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