如果有读者对于加解密的技术没有丝毫认识,可能会对gpg的使用有一些疑问,请查看加解密技术优点与局限性分析
写作起源:笔者看了网上很多gpg使用的教程,发现有许多文章不明所以,解释不够到位,对初学者的学习造成了很大的困难,所以我决定来写一篇针对于初学者的教程。


简介

GPG(GNU Privacy Guard)是一个用于加密、签名和验证文件的开源加密工具。它可以帮助用户保护他们的数据免受未经授权的访问和篡改。您可以使用GPG来加密和签名电子邮件、文件和文本消息,以确保它们的安全性和完整性。

使用方法

一、下载

打开终端,输出以下命令进行下载:

1|sudo apt-get install gnupg

接着跟随提示完成下载即可
然后输入

1|gpg --help

既可以检验是否下载完成,还可以大致明白gpg的用法。
之后会出现一大段文字,介绍一些命令的基本用法。
接下来我们依次为大家展现一些常用的代码。

二、生成密钥对

输出以下代码

1|gpg --gen-key

之后会依次跳出

真实姓名:
电子邮箱地址:

依次输入后,设置密码密钥生成成功。
注意:真实姓名不一定是真实的
生成成功后会跳出以下界面:

pub    rsa【】 2023-12-22【】 【有效至:】
      【一堆乱码】
uid   【用户名】<邮箱>
sub    rsa【】 2023-12-21【】 【有效至:】 

以上的菜单有几个知识需要和大家解释:
pub代表主公钥,rsa是默认的密码类型,后面跟的数字为密码的密码强度。
【一堆乱码】是的用户名(uid)的hash码。
sub代表子公钥,第一次创建子公钥为空。

详细配置

如果您想仔细配置密钥请输入以下命令
1|gpg --full-generate-key

接下来我们会看到以下的内容

请选择您要使用的密钥类型:
   (1) RSA 和 RSA (默认)
   (2) DSA 和 Elgamal
   (3) DSA(仅用于签名)
   (4) RSA(仅用于签名)
  (14)卡中现有密钥
您的选择是? 

之后是密码强度的设置:

RSA 密钥的长度应在 1024 位与 4096 位之间。
您想要使用的密钥长度?(3072) 
请求的密钥长度是 3072 位

之后是密码有效期:

请设定这个密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 
密钥永远不会过期
这些内容正确吗? (y/N) y

最后输入y,之后会跳到输出真实姓名和邮箱的位置了。

如果要查看用户和密码信息,请输入以下代码:

1|gpg --list-keys

出现的界面和上面的界面是非常相似的,上面不仅有本机的用户的公钥,还有从外部导入的公钥。
如果想要查看本机用户的gpg,请输入:

1|gpg --list-secret-keys

这里会出现类似于下面的界面

sec
uid
ssb

与上面的同理:
sec是主私钥。
ssb是子私钥。

三、密钥配置

1、公钥

现在开始进入密钥配置,输出以下代码:

1|gpg --export -a "Your uid" > public_key.asc

请一定注意:不要忘记每一个空格
解释:这个命令将导出您指定的用户名(Your uid)的公钥,并将其保存到一个名为public_key.asc(文件名可以自定义,后缀不要改)的文件中。-a选项是将公钥转换为ASCII码格式,以便更容易地与他人分享。

无论如何公钥需要分享给其他人的,公钥可以放到完全信任的服务器上,这里我不详细叙述。
A将公钥分享给B后,B需要将公钥导入进gpg中,输出以下代码:

1|gpg --import public_key.asc

2.*私钥备份(可不进行)

提醒:私钥必须要自己保管好,不要外传。

如果想要备份一份私钥防止丢失
输出以下代码:

1|gpg --export-secret-keys -a "Your uid" > private_key.asc

将"Your uid"替换为您的用户名,这将导出您指定的用户名的私钥,并将其保存到名为private_key.asc的文件中。-a选项将私钥转换为ASCII格式。
导出私钥时,请务必妥善保管private_key.asc文件。私钥的泄露可能会导致严重的安全问题。

四、加密与解密

前情提要:A将公钥传给B,B将公钥导入到自己的密钥环中。

类型1:B加密,A解密

  1. B使用A的公钥加密文件,首先选定要加密的文件message.txt,然后输入以下代码:
1|gpg --recipient "A's uid" --encrypt message.txt

运行代码之后,会生成一个加密后的文件message.txt.gpg。

  1. B传递加密文件给A
  2. A收到文件后,使用自己的私钥进行解密
1|gpg --decrypt message.txt.gpg

这样会把文件还原到message.txt.,其中包含原始的、未加密的文本内容。

类型2:A加密,B解密

  1. A使用私钥加密:
1|gpg --encrypt -r "B's UID" -o encrypted_file.gpg message.txt

释:将“A’s uid”替换为A的用户名,message.txt替换为A要加密的文件名,最后加密后的文件输出为"encrypted_file.gpg"。上述命令将使用A的私钥对文件进行加密。

如果想进行签名那么请输出以下代码:

1|gpg --encrypt --sign -r "B's UID" -o encrypted_file.gpg message.txt
  1. A 将加密文件发送给B
  2. B使用公钥解密数据
gpg --decrypt -o decrypted_file message message.txt.gpg

释:将“message.txt.gpg”替换为您要解密的文件名。上述命令将使用您的公钥对文件进行解密,并将解密后的文件保存为“decrypted_file”。

总结

gpg的使用对于理解加解密过程,理解数字签名和身份验证等相关知识有重要作用。
用户实际进行加解密操作,对维护数据安全有重要作用

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐