使用BouncyCastle和GnuPG 2.1的`pubring.kbx`文件

Jak*_*ski 4 java bouncycastle gnupg openpgp

我正在尝试使用BouncyCastle和PGP2来读取公钥.问题是,因为GnuPG 2.1存储在pubring.kbx而不是pubring.gpg.这导致IOExceptionpublic key ring doesn't start with public key tag: tag 0x0

知道我是否以及如何使用BC与GnuPG 2.1?

Jen*_*rat 8

GnuPG 2.1默认使用新的密钥箱文件格式 - 如果pubring.gpg找不到.如果存在"遗留"密钥环文件,则将使用它.

我不知道Bouncy Castle支持.kbx文件格式.因此,如果你想在GnuPG使用的相同密钥文件上一起使用Bouncy Castle,你有三个选择:

  • 另外在其他pubring.gpg地方维护旧文件,这意味着运行gpg --export--export-secret-keys在需要时运行.旧pubring.gpg的只是一个键转储,你可以直接使用导出输出作为密钥环.
  • pubring.gpg在GnuPG主目录中使用a ,使用其他词语来降低.kbx文件的性能以换取兼容性.

    首先,请务必复制整个~/.gnupg文件夹或确保备份最新!

    最后,迁移过程归结为将密钥箱文件中的信息导出为旧的OpenPGP密钥环格式.查看上面链接的更改日志中从.kbx文件迁移到文件的提议.gpg:

    $ cd ~/.gnupg
    $ gpg --export-ownertrust > otrust.lst
    $ mv pubring.gpg publickeys
    $ gpg2 --import-options import-local-sigs --import publickeys
    $ gpg2 --import-ownertrust otrust.lst
    
    Run Code Online (Sandbox Code Playgroud)

    反向过程应该看起来非常相似(假设没有存储密钥,否则请在下面阅读,并交换gpg2gpg匹配您计算机上安装的二进制文件):

    $ cd ~/.gnupg
    $ gpg2 --export-ownertrust > otrust.lst
    $ gpg2 --export > pubring.gpg
    $ mv pubring.kbx pubring.kbx~
    $ gpg2 --import-options import-local-sigs
    $ gpg2 --import-ownertrust otrust.lst
    
    Run Code Online (Sandbox Code Playgroud)

    --export结果可以直接作为新密钥环,所以没有--import这个文件的需要.Ownertrust应该以类似的方式复制,我保留的是这里提出的更改日志.

    如果您还存储了私钥,我最好先将它们导出到另一个文件中,然后再次导入它们:

    $ cd ~/.gnupg
    $ gpg2 --export-secret-keys > secret-keys.gpg
    $ gpg2 --export-ownertrust > otrust.lst
    $ gpg2 --export > pubring.gpg
    $ mv pubring.kbx pubring.kbx~
    $ gpg2 --import-options import-local-sigs --import secret-keys.gpg
    $ gpg2 --import-ownertrust otrust.lst
    
    Run Code Online (Sandbox Code Playgroud)
  • 实施.kbxBouncy Castle 的格式.


Gun*_*nar 5

从 1.60 版开始,BouncyCastle 支持读取 KeyBox 文件。

https://www.bouncycastle.org/releasenotes.html

现在已为 GNU 密钥箱文件格式添加了解析器。GPG SExpr 解析器现在涵盖更广泛的密钥类型。

KeyBoxTest.java中有一些示例代码。