簡體   English   中英

如何使用 Bouncycastle 驗證 PGP 分離簽名

[英]How to verify PGP detached signature using Bouncycastle

我想使用 Bouncycastle 解析和驗證 OpenPGP 分離簽名。 簽名將是這樣的:

-----BEGIN PGP SIGNATURE-----
Version: fast-openpgp

wsBcBAABCAAQBQJfRm9jCRDzeoZuOgUYnQAAVkoIAEReZ6Pp3SimYKbH+JHzwW8q
LiWeQIPNatFwDQHgD4ipT9aXMaObnXXl83KUQ5lPx8Bw77BxParpUbtCRNTrWoU5
XZ1ikfqzmeVEJrk4YsNKDiBpvjbyF86F8KSkXhwdLWSm1e6yemnXKcTHg2L13AiS
6TIqXXbcRmFF7RTO4DQrjira2YYlW8eHPIcCmOq0YjR4Qpz+R/+3BlfV2TAcL/sd
SeKAczgvdP6CS6be1rPA0nlgw9T853BpgqplQVM30pUhVlni7ga1YRzENm6Qic5A
uEbmPyunim2WHytPuLQq+BQvAq+Wrr2kiM7DhyvYFihDNdFWW67Y+fSlgPxOi/8=
=QKpc
-----END PGP SIGNATURE-----

這是我嘗試在 Kotlin 中創建 CMSSignedData 的方法:

fun verifyDetached(signatureString: String, dataString: String): Boolean {
    val dataBytes = dataString.toByteArray()
    val signatureBytes = signatureString.toByteArray()
    val processableDataBytes = CMSProcessableByteArray(dataBytes)
    val ci = ContentInfo.getInstance(ASN1Sequence.fromByteArray(signatureBytes))
    val cms = CMSSignedData(processableDataBytes, ci)
    ...
}

當我將整個簽名塊傳遞給函數(包括 -----BEGIN PGP SIGNATURE -----)時,我得到java.io.IOException: unknown tag 13 encountered

當我刪除簽名包裝器並將簽名內容傳入函數時,我得到java.io.IOException: Extra data detected in stream at org.bouncycastle.asn1.ASN1Primitive.fromByteArray

當我直接將signatureBytes傳遞給 CMSSignedData 構造函數時,我得到java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.DLApplicationSpecific

我應該如何使用 Bouncycastle 驗證這種簽名?

CMS 與 PGP 完全不同且不相關。 對於 PGP,使用 bcpg 中 PGP 的 BouncyCastle 實現,而不是 bcpkix 中的 CMS 實現。 參見例如使用 BouncyCastle 驗證 PGP 簽名如何在 JAVA 中簽名和驗證文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM