You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

删除~/.gnupg目录后,如何恢复GPG功能并导出公私密钥?

从残留GnuPG文件导出公私钥的方法

没问题,你手里的pubring.kbxprivate-keys-v1.d目录完全可以用来导出公私钥,不用慌,分两步来操作:

一、导出公钥

pubring.kbx是GnuPG的标准公钥环文件,直接用gpg命令就能读取导出,不需要额外信息:

  • 导出所有公钥到ASCII格式文件(方便保存和分享):
    gpg --no-default-keyring --keyring /path/to/your/pubring.kbx --export --armor -o all_public_keys.asc
    
    /path/to/your/pubring.kbx替换成你实际的文件路径,--armor参数会生成易读的ASCII文本,去掉的话就是二进制格式。
  • 如果只想导出特定公钥,先列出所有公钥信息定位目标:
    gpg --no-default-keyring --keyring /path/to/your/pubring.kbx --list-public-keys
    
    找到目标密钥的ID或邮箱,添加到命令末尾即可,比如:
    gpg --no-default-keyring --keyring /path/to/your/pubring.kbx --export --armor -o alice_pub.asc alice@example.com
    

二、导出私钥

private-keys-v1.d里的文件是按keygrip命名的,但你不知道keygrip也没关系,我们可以通过公钥环反向获取,有两种方法可选:

方法1:通过公钥获取keygrip后关联私钥

  1. 先创建一个临时的GnuPG工作目录,避免干扰现有环境:
    mkdir -p /tmp/temp_gpg
    
  2. 把你的pubring.kbx导入到临时目录:
    gpg --homedir /tmp/temp_gpg --import /path/to/your/pubring.kbx
    
  3. 列出公钥并显示对应的keygrip:
    gpg --homedir /tmp/temp_gpg --list-public-keys --with-keygrip
    
    输出里会看到每个公钥的Keygrip:字段,比如:
    pub   rsa4096 2023-01-01 [SC]
          ABCDEF1234567890ABCDEF1234567890ABCDEF12
    Keygrip = 1234567890ABCDEF1234567890ABCDEF12345678
    uid           [ultimate] Alice <alice@example.com>
    
  4. private-keys-v1.d里对应keygrip的文件复制到临时目录的私钥目录:
    mkdir -p /tmp/temp_gpg/private-keys-v1.d
    cp /path/to/your/private-keys-v1.d/1234567890ABCDEF1234567890ABCDEF12345678 /tmp/temp_gpg/private-keys-v1.d/
    
  5. 现在就可以导出私钥了(如果私钥有密码保护,会提示你输入):
    gpg --homedir /tmp/temp_gpg --export-secret-keys --armor -o alice_priv.asc alice@example.com
    

方法2:直接让GnuPG加载残留文件

如果你的pubring.kbxprivate-keys-v1.d本来就在同一个目录下(比如原来的~/.gnupg没完全删除干净),可以直接指定这个目录为GnuPG的工作目录:

gpg --homedir /path/to/your/residual_gnupg_dir --list-secret-keys

如果命令能正常列出私钥,说明GnuPG已经识别到了,直接导出即可:

gpg --homedir /path/to/your/residual_gnupg_dir --export-secret-keys --armor -o all_private_keys.asc

需要注意的是,私钥导出时如果有密码保护,必须输入正确的密码才能完成导出。

内容的提问来源于stack exchange,提问作者Artur Shaikhullin

火山引擎 最新活动