我使用的是 Mac,并且已创建并导出密钥:
% gpg --generate-key
% gpg --export --armor --output new.pub B42B1AF5
您可以在这里看到其中的内容:
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ1qw5BYJKwYBBAHaRw8BAQdAnS7bhQ3Knq2lrnLs/OLjaubtBX8hV2asKd0q
2aSfoPO0HHNhaGFuZCA8c2FoYW5kekBob3RtYWlsLmNvbT6ImQQTFgoAQRYhBLXY
surbx74eVf/7uUewZ0+0Kxr1BQJnWrDkAhsDBQkFo5qABQsJCAcCAiICBhUKCQgL
AgQWAgMBAh4HAheAAAoJEEewZ0+0Kxr1GAYA/jGm3n7zzXU7XzkJKDMOitECB1OS
St/OeIDpIjg0PL9gAQDySb5KgFBEslg+TvJ7GwYqZVaTXZoNVg7+VTvVXxvDAbg4
BGdasOQSCisGAQQBl1UBBQEBB0B2OXM9tUPz/4yakILx8PtrikrqxuOSIN3I/wEU
vmvrTQMBCAeIfgQYFgoAJhYhBLXYsurbx74eVf/7uUewZ0+0Kxr1BQJnWrDkAhsM
BQkFo5qAAAoJEEewZ0+0Kxr1jtsBAPYjwX9Q+CXJW5adGz67N9zZzKSsRv+gd4Xc
1g8PbD5BAQD3rIqPWvU5XjDQ8o877XiXoOCLs+vFWk06pOF0Tj+bBw==
=sKDL
-----END PGP PUBLIC KEY BLOCK-----
我的代码,使用 PGPainless-SOP 库:
import sop.SOP;
SOP sop = new SOPImpl();
byte[] cert = sop.extractCert()
.key(new FileInputStream(encryptionKeyPath))
.getBytes();
依赖关系:
<dependency>
<groupId>org.pgpainless</groupId>
<artifactId>pgpainless-sop</artifactId>
<version>1.7.2</version>
</dependency>
例外:
sop.exception.SOPGPException$BadData: org.bouncycastle.openpgp.PGPException: No key data found.
at org.pgpainless.sop.KeyReader$Companion.readSecretKeys(KeyReader.kt:39)
at org.pgpainless.sop.ExtractCertImpl.key(ExtractCertImpl.kt:22)
at con.com.pkg.uploader.utils.app.encryptInputStream(Utils.java:94)
at con.com.pkg.uploader.utils.app.encryptInputStreamTest(UtilsTest.java:22)
Caused by: org.bouncycastle.openpgp.PGPException: No key data found.
... 45 more
为什么没有找到关键数据?我也尝试过用另一把钥匙,同样的结果。
查看文档揭示了错误。使用 OpenPGP 和包作者的术语,
extractCert()
方法从秘密密钥获取公钥(证书),但您没有。相反,你有一个装甲公钥。
要从装甲公钥获取证书,使用PGPainless.readKeyRing().publicKeyRing()
:
PGPPublicKeyRing cert = PGPainless.readKeyRing().publicKeyRing(PGP_PUBKEY);