使用pgpainless导入密钥时“找不到密钥数据”

问题描述 投票:0回答:1

我使用的是 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

为什么没有找到关键数据?我也尝试过用另一把钥匙,同样的结果。

encryption bouncycastle pgp pgpainless pgpainless-sop
1个回答
0
投票

查看文档揭示了错误。使用 OpenPGP 和包作者的术语,

extractCert()
方法从秘密密钥获取公钥(证书),但您没有。相反,你有一个装甲公钥。

要从装甲公钥获取证书,

使用PGPainless.readKeyRing().publicKeyRing()

PGPPublicKeyRing cert = PGPainless.readKeyRing().publicKeyRing(PGP_PUBKEY);
    
© www.soinside.com 2019 - 2024. All rights reserved.