繁体   English   中英

PGP 签名格式阅读器

[英]PGP signature format reader

在我的项目中,我需要使用相应的公钥来验证 PGP 明确签名的签名。 虽然我确实设法找到了一个代码(例如: https : //github.com/cjmalloy/openbitpub/blob/64485d64a699eb6096f01b27d5f7e51dd726602f/src/main/java/com/cjmalloy/obp/server/pgp/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相关为止。

我在想,也许存在一些专门的解析器可以使用-----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,您有两条可能的道路可以遵循:

我从PEMReader包中找到了相关的PEMReader类,但到目前为止没有任何与 PGP 相关的类。

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

我有时会遇到同样的情况。

这是通过使用充气城堡依赖项和使用方法解决的

解密和验证(输入流输入,输出流输出,输入流 publicKeyIn,输入流密钥输入,字符 [] 密码)

在 PGP 实用程序类中

Java的商业OpenPGP 库提供了一个方便的 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");
        }
    }
}

免责声明:我为滴滴出行工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM