使用PGPainless导入密钥时出现“No key data found”错误求助
问题:PGPainless-SOP调用extractCert时提示“No key data found”
操作背景
在Mac系统上创建并导出PGP密钥,执行命令如下:
% 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();
Maven依赖配置:
<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
问题原因与解决方案
核心原因
extractCert()方法的设计逻辑是读取PGP私钥文件,从中提取出对应的公钥证书部分。但你传入的是用gpg --export导出的纯公钥文件,库在尝试读取私钥数据时自然会找不到,因此抛出“No key data found”异常。
解决办法
- 直接使用公钥文件:如果仅需使用公钥,无需调用
extractCert(),直接读取公钥文件的字节内容即可,因为导出的new.pub本身就是完整的公钥证书。 - 传入私钥文件:若确实需要通过
extractCert()提取证书,需先导出私钥文件,命令如下:
然后将代码中的% gpg --export-secret-keys --armor --output new.priv B42B1AF5encryptionKeyPath指向这个私钥文件。 - 检查文件路径:确认
encryptionKeyPath指向的文件存在且路径正确,避免因文件找不到导致读取失败。
内容的提问来源于stack exchange,提问作者Sahand
相关产品推荐
相关产品推荐

