【问题标题】:Verification of PGP signature using BouncyCastle使用 BouncyCastle 验证 PGP 签名
【发布时间】:2017-06-29 10:36:21
【问题描述】:

我已经生成了一个 PGP 签名:

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBBABCAAGBQJYnkPxAAoJEBFjzYGyXBOsXRoH/3O4bwKK45aUN+m0N4jsZ+n5
W8R/aGti/llvJ62tHBCO5BIp/pp+b1Gdv99xtnJXHu/f0TqPYj+fwq4vfaorNTtA
Vtq8MaMesw1OWZEfu/lyjNOwdg81FUlYkw0Bjo3H/MxWjWYUiHmJo+OGriyf5dv/
433ZqitZMxLHCfZsuoU5teZ0BPUSoNjF6hOFK3ZI7QXsgYUyohzW2goy9bDVCKRq
e73CHpnMKCrnDc+/4+sK349bD/cZp6/c0T8b7cBCeBGGilPD6ovJUQE5vhGTKnJM
lgyxhA87tw9wqFwpZXDr0nzOP+MFfE9WRGecVYZ9G+LP/biefSe5iWRaPIcZIi0=
=qUHb
-----END PGP SIGNATURE-----

code 在这里,使用 BouncyCastle 实现:

(sign "project.clj"
      "project.clj.asc"
      <FILENAME>
      "98B9A74D")

我希望能够读取此签名并使用公钥对其进行验证。这将如何变回 BouncyCastle org.bouncycastle.openpgp.PGPSignature 对象?

【问题讨论】:

    标签: bouncycastle gnupg gpg-signature


    【解决方案1】:

    如何将其转回 BouncyCastle ... PGPSignature 对象?

    从 bcpg jar 中提供的org.bouncycastle.openpgp.examples.DetachedSignatureProcessor 中提取相关代码并将其专门用于您的案例(装甲,未压缩):

    InputStream in = new org.bouncycastle.bcpg.ArmoredInputStream (new FileInputStream (filename));
    // or substitute other InputStream depending on where this data is available
    org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory pgpFact = new org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory(in);
    org.bouncycastle.openpgp.PGPSignatureList p3 = (org.bouncycastle.openpgp.PGPSignatureList)pgpFact.nextObject();
    org.bouncycastle.openpgp.PGPSignature sig = p3.get(0);
    in.close(); // not in example but needed in quality code
    

    我希望能够读取此签名并使用公钥对其进行验证。

    该示例的其余部分显示了一种在给定公钥(在示例中来自发布文件)和相关数据(在示例中也是文件)的情况下验证此类 PGPSignature 的方法。

    【讨论】:

    • 质量代码也会在发生异常时关闭文件。这最好通过使用“尝试资源”来完成:try (InputStream in = new org.bouncycastle.bcpg.ArmoredInputStream (new FileInputStream (filename))) {。这样java会自动为你关闭文件,不需要显式关闭。
    • @KlasLindbäck:很好,虽然我看过的 BC 示例不使用 try-resources,大概是因为 BC 宣传他们的代码可移植回 1.5。他们同样使用显式转换,而不是像 List&lt;Sometype&gt; 这样我觉得更烦人的形式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2013-05-15
    相关资源
    最近更新 更多