簡體   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