【问题标题】:Bouncy castle GNUPG decryption充气城堡 GNUPG 解密
【发布时间】:2014-09-19 10:18:50
【问题描述】:

我在尝试解密使用 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 位长度。我认为这是不正确的,对吗?也许需要在我的 IDE 上以某种方式单独添加 jar 文件?

我看到提供的公钥是 RSA 2048 位,所以也许所有这些实现都需要以其他方式完成?

编辑: 刚刚注意到单元测试中使用的密钥也是 RSA 2048 位,所以应该不是这样。

【问题讨论】:

    标签: java encryption bouncycastle gnupg


    【解决方案1】:

    默认情况下,从 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 运行测试。

    【讨论】:

    • 由于详细程度而将您的答案标记为正确。但在我的情况下,罐子被放在 jre/.. 中,将它们放在 jdk/jre/.. 中解决了问题。
    • 是的,超过 JRE 是正常的。如果按照“安装 Java”中的方式安装 Java,则仅获得 jre。此外,您旁边还有一个 jdk,当然 jdk 有自己的 jre,这就是您的 IDE 正在使用的。很高兴听到问题现在已经解决了。
    【解决方案2】:

    可能底层代码使用带有 256 位密钥的 AES,默认 Java 安全策略不允许这样做(由于美国出口法律)。

    要解决此问题,您可以为 JCE 安装无限的策略文件。
    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

    【讨论】:

      猜你喜欢
      • 2013-04-20
      • 1970-01-01
      • 2015-04-26
      • 2017-08-21
      • 1970-01-01
      • 2013-05-25
      • 2015-06-29
      • 2016-08-10
      • 1970-01-01
      相关资源
      最近更新 更多