在我的项目中,我需要使用相应的公钥验证PGP清除签名的签名。虽然我确实设法找到了这样做的代码(例如:https://github.com/cjmalloy/openbitpub/blob/64485d64a699eb6096f01b27d5f7e51dd726602f/src/main/java/com/cjmalloy/obp/server/pgp/PgpUtil.java),但它在低级别上运行并且看起来非常可怕。
我在想,也许存在一些可以使用-----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相关的内容。
答案 0 :(得分: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包中找到了相关的
PEMReader
类,但到目前为止还没有与PGP相关的内容。
你可能看错了BouncyCastle包。 OpenPGP不使用PEM格式的密钥(属于X.509标准),因此这个类根本没用。
答案 1 :(得分:0)
我有时也会遇到相同的情况。
此问题通过使用有弹性的城堡依赖性和方法来解决
decryptAndVerify(InputStream in,OutputStream fOut,InputStream publicKeyIn,InputStream keyIn,char [] passwd)
在PGP util类中
答案 2 :(得分:0)
商业广告OpenPGP Library for Java提供了一个方便的API,用于验证明文签名。示例代码为:
import com.didisoft.pgp.*;
public class VerifyFile {
public static void main(String[] args) throws Exception{
// create an instance of the library
PGPLib pgp = new PGPLib();
// verify and extract the signed content
SignatureCheckResult signatureCheck = pgp.verifyAndExtract("signed.pgp", "sender_public_key.asc", "OUTPUT.txt");
if (signatureCheck == SignatureCheckResult.SignatureVerified) {
System.out.println("The signature is valid.");
} else if (signatureCheck == SignatureCheckResult.SignatureBroken) {
System.out.println("Message corrupted or signature forged");
} else if (signatureCheck == SignatureCheckResult.PublicKeyNotMatching) {
System.out.println("Signature not matching provided public key (the message is from another sender)");
} else {
System.out.println("No signature found in message");
}
}
}
免责声明:我为DidiSoft工作。