1. 安装gpg工具

apt-get install gnupg2 

2.生成秘钥对

gpg --full-generate-key

3.查看生成秘钥

gpg --list-secret-keys --keyid-format=long
sec   rsa4096/8715034D083B404F 2025-01-22 [SC]
      6D0BE4256B845CB59883381D8715034D083B404F
uid                 [ultimate] sparkwalk (none) <sparkwalk@gmail.com>
ssb   rsa4096/4EAD8D5C701EEDF3 2025-01-22 [E]
  • sec: 表示私钥(Secret Key)。
  • uid: 是你的用户信息。
  • ssb: 是子密钥(Subkey)
    8715034D083B404F是密钥的长ID,加解密时可以用来指定密钥

4.导出公钥

gpg --armor --export sparkwalk@gmail.com > public_key.asc
  • armor: 表示以文本格式导出
  • your.email@example.com: 是在生成密钥时输入的邮箱地址

5.导出私钥

gpg --armor --export-secret-keys sparkwalk@gmail.com > private_key.asc

6.使用密钥

1. 加密文件

gpg --encrypt --recipient your.email@example.com file.txt

生成的加密文件为 file.txt.gpg

2. 解密文件

gpg --decrypt file.txt.gpg > file.txt

3. 签名文件

gpg --sign file.txt

4. 验证签名

gpg --verify file.txt.gpg

7. 删除密钥对

# 删除公钥
gpg --delete-key your.email@example.com

# 删除私钥
gpg --delete-secret-key your.email@example.com

# 删除公钥和私钥
gpg --delete-secret-and-public-keys your.email@example.com

8.使用指定秘钥签名

  1. 查看可用密钥
    在签名之前,先确认你有哪些可用的密钥对。运行以下命令:
gpg --list-secret-keys --keyid-format=long

输出示例:

sec   rsa4096/ABCDEF1234567890 2024-01-01 [SC]
      1234567890ABCDEF1234567890ABCDEF
uid           [ultimate] Your Name <your.email@example.com>
ssb   rsa4096/0987654321098765 2024-01-01 [E]
  • sec: 表示私钥(Secret Key)。
  • uid: 是你的用户信息。
  • ABCDEF1234567890: 是密钥的长ID,可以用来指定密钥
  1. 使用指定密钥签名文件
    假设你想使用某个特定的密钥(例如 ABCDEF1234567890 )对文件进行签名,可以通过以下命令:
gpg --local-user ABCDEF1234567890 --sign file.txt
  • ABCDEF1234567890: 是密钥的长ID。
  • file.txt: 是需要签名的文件。
  • 签名后的文件会生成为: file.txt.gpg
  1. 使用指定密钥签名文件并生成分离签名
    如果你希望生成一个独立的签名文件(而不是将签名嵌入到原文件中),可以使用–detach-sign参数:
gpg --local-user ABCDEF1234567890 --detach-sign file.txt

这会生成一个名为file.txt.sig的独立签名文件。

  1. 验证签名
    签名完成后,接收方可以使用以下命令验证签名:

对于嵌入签名的文件:

gpg --verify file.txt.gpg

对于分离签名的文件:

gpg --verify file.txt.sig file.txt
  1. 使用密钥的邮箱地址指定密钥
    如果你不想使用密钥 ID,也可以直接使用密钥的邮箱地址来指定密钥。例如:
gpg --local-user your.email@example.com --sign file.txt

这种方式更直观,尤其是当你有多个密钥时。

9.生成一个包含明文内容和Base64编码签名

  1. 使用 --clearsign 参数签名文件假设你有一个文件 file.txt ,你可以使用以下命令生成一个包含明文内容和Base64签名的文件:
gpg --clearsign --local-user <your-key-id> file.txt
  • –clearsign :表示生成明文签名文件
  • –local-user :指定使用哪个密钥进行签名(可以是密钥的长ID或邮箱地址)。
  • file.txt :需要签名的文件。

执行后,GPG会生成一个名为 file.txt.asc 的文件,其中包含原始文件的明文内容和Base64编码的签名

  1. 查看生成的签名文件

    打开生成的 file.txt.asc 文件,你会看到类似以下内容:

     -----BEGIN PGP SIGNED MESSAGE-----
     Hash: SHA256

     这是文件的原始内容。签名后,内容仍然可以被阅读。

     -----BEGIN PGP SIGNATURE-----
     Version: GnuPG v2

iQEcBAABAgAGBQJdX123AAoJEBh3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567

10.导入公/私钥

如果你从他人那里获取了一个公/私钥文件(通常是 .asc 或 .gpg 文件),可以通过以下命令导入:

gpg --import public_key.asc
  1. 导入密钥时指定信任级别

    在导入公钥后,你可能需要设置对该密钥的信任级别。这可以通过以下命令完成:

    编辑密钥信任

    “`shell
    gpg –edit-key <key-id>
    “`

    • 是密钥的短 ID 或长 ID。

    • 在编辑模式下,输入 trust ,然后按提示设置信任级别:

      • 1 :不信任

      • 2 :边缘信任

      • 3 :完全信任

      • 4 :最终信任(通常用于自己的密钥)

        • 完成后输入 save 保存并退出。
    1. 验证导入的密钥

      导入密钥后,建议验证密钥的指纹,确保导入的密钥是正确的。

      查看密钥指纹

      “`shell
      gpg –fingerprint <key-id>
      “`

      • 比对输出的指纹与原始密钥的指纹是否一致。

11. 修改默认路径

在使用 GPG(GNU Privacy Guard)时,密钥(包括公钥和私钥)通常会被保存在默认的密钥库路径中。GPG 的默认密钥库路径因操作系统而异,但你可以通过命令行查看或修改这些路径。
1. 默认密钥库路径

Linux 和 macOS
默认情况下,GPG 的密钥库位于用户的主目录下的.gnupg文件夹中:

~/.gnupg/
  • 公钥库:~/.gnupg/pubring.kbx(GPG 2.x)或~/.gnupg/pubring.gpg(GPG 1.x)

  • 私钥库:~/.gnupg/secring.gpg(GPG 1.x)或存储在~/.gnupg/下的其他文件中(GPG 2.x)

  1. 查看当前密钥库路径下的秘钥
gpg --list-keys --homedir

12. 导入到指定目录下

gpg --homedir /path/to/new/gnupg --import public_key.asc
  • –homedir: 指定密钥库的路径

Related Posts