2015-11-01 63 views
0

在我的项目中,我需要使用相应的公钥验证PGP明确签名签名。虽然我设法找到了一个代码(例如:https://github.com/cjmalloy/openbitpub/blob/64485d64a699eb6096f01b27d5f7e51dd726602f/src/main/java/com/cjmalloy/obp/server/pgp/PgpUtil.java),但它的运行水平很低,看起来非常糟糕。PGP签名格式读取器

我在想,也许有一些专门的解析器可以使用-----BEGIN PGP PUBLIC KEY BLOCK-----xxx-----END PGP PUBLIC KEY BLOCK----------BEGIN PGP SIGNED MESSAGE-----xxx-----BEGIN PGP SIGNATURE-----xxx-----END PGP SIGNATURE-----块,这样我就可以用更多的声明方式检查签名了吗?

我发现PEMReader类的课程包含bouncycastle.openssl包,但目前为止还没有PGP相关的课程。

回答

2

我在想,也许存在一些专门的语法分析器,它可以使用-----BEGIN PGP PUBLIC KEY BLOCK-----xxx-----END PGP PUBLIC KEY BLOCK----------BEGIN PGP SIGNED MESSAGE-----xxx-----BEGIN PGP SIGNATURE-----xxx-----END PGP SIGNATURE-----块,这样我可以更声明的方式检查数字签名?

解析器是不够的,在所有的 - 你将需要实现许多像对称密钥推导特定OpenPGP的函数从字符串(加密密钥),处理不同类型的不对称加密算法,哈希款项的,不同类型的数据包嵌套,... - 至少你不需要实现OpenPGP CBC模式派生,因为你不需要加密(只有签名)。

OpenPGP是复杂地写你自己的解析器和加密代码,而不是依赖现有的库。最后,对于Java,您有两条可能的道路:

我发现从相关的包装bouncycastle.openssl但没有PGP相关至今PEMReader类。

您可能看错了BouncyCastle包。 OpenPGP不使用PEM格式的密钥(属于X.509标准),所以这个类根本没用。

+0

当然,我将使用'bouncycastle.openpgp'进行签名验证,现在我正在做它。这只是我有很多代码实际上是解析(可以在参考的例子中看到像逐行阅读,抛出换行符等)。我明白'PEMReader'不完全是我需要的,但它很接近。 “PEMReader”的存在让我怀疑PGP是否存在类似的东西。 – Anton

+0

我从来没有和Bouncy Castle一起工作,但据我所知你必须导入公钥,加载签名文件(查看'gpg --list-packets'以了解如何解组,如果需要的话,在Bouncy Castle),最后进行验证。 JavaDoc之外的文档很少,你可能会在互联网的其他地方找到一些合理的例子。 –

+1

只有私钥需要S2K;验证使用公钥。否则一致。 –