学习使用gpg

参考文献

GPG入门教程
这篇博客其实很详细,但是里面有一些指令在我实际操作时出了些问题,因此下面我将用示例来说明一些问题

示例

准备

两台主机,一台生成公私钥,另一台生成需要发送的文件

安装(这里以linux为例)

使用指令sudo apt-get install gnupg安装gpg
安装完成后使用gpg --help来查看相关指令以帮助使用

生成密钥(这里以博客为准)

使用gpg --gen-key生成一对公私钥
回车后出现

 gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
  This is free software: you are free to change and redistribute it.
  There is NO WARRANTY, to the extent permitted by law.

  请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名) 
   (4) RSA (仅用于签名)
  您的选择?

第一段是版权声明,然后让用户自己选择加密算法。默认选择第一个选项,表示加密和签名都使用RSA算法。
然后,系统就会问你密钥的长度。

RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)

当然密钥越长越安全,默认是2048位
然后我们设定密钥的有效期

请设定这把密钥的有效期限。
   0 = 密钥永不过期
   <n> = 密钥在 n 天后过期
   <n>w = 密钥在 n 周后过期
   <n>m = 密钥在 n 月后过期
   <n>y = 密钥在 n 年后过期
    密钥的有效期限是?(0)

如果密钥只是个人使用,并且你很确定可以有效保管私钥,建议选择第一个选项,即永不过期。回答完上面三个问题以后,系统让你确认。

以上正确吗?(y/n)

输入y,系统就要求你提供个人信息。

您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合成用户标识,如下所示:
您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合成用户标识,如下所示:
  "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

  真实姓名:
  电子邮件地址:
  注释:

"真实姓名"填入你姓名的英文写法,"电子邮件地址"填入你的邮件地址,"注释"这一栏可以空着。

然后,你的"用户ID"生成了。

您选定了这个用户标识:
   "Ruan YiFeng <yifeng.ruan@gmail.com>"

我的"真实姓名"是Ruan YiFeng,"电子邮件地址"是yifeng.ruan@gmail.com,所以我的"用户ID"就是"Ruan YiFeng yifeng.ruan@gmail.com"。系统会让你最后确认一次。

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?

输入O表示"确定"。
接着,系统会让你设定一个私钥的密码。这是为了防止误操作,或者系统被侵入时有人擅自动用私钥。

您需要一个密码来保护您的私钥:

然后,系统就开始生成密钥了,这时会要求你做一些随机的举动,以生成一个随机数。

  我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

几分钟以后,系统提示密钥已经生成了。

  gpg: 密钥 EDDD6D76 被标记为绝对信任
  公钥和私钥已经生成并经签名。

请注意上面的字符串"EDDD6D76",这是"用户ID"的Hash字符串,可以用来替代"用户ID"。
这时,最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥。

  gpg --gen-revoke [用户ID]

上面的"用户ID"部分,可以填入你的邮件地址或者Hash字符串(以下同)。

传输文件

A主机生成密钥,B主机加密文件发送给A,发送文件通过QQ邮箱实现,因为博客中的指令使用会失效,所以我们需要另外换方式发送文件。
A主机首先使用gpg --armor --output public-key.txt --export [用户ID]导出公钥,用户ID填A主机的ID,然后将公钥文件public-key.txt通过QQ邮箱发送给B主机,B主机首先使用gpg --import 用户ID导入公钥,这里用户ID填A主机ID,然后B主机使用gpg --recipient [用户ID] --output demo.en.txt --encrypt demo.txt加密文件demo.txt得到加密后的文件demo.en.txt,其中用户ID需要填A主机的ID。然后再将文件demo.en.txt发送回A主机。A主机使用gpg --decrypt demo.en.txt --output demo.de.txt解密文件得到解密后的文件demo.de.txt。然后A主机为了验证两个文件内容是否相同可以使用diff demo.txt demo.de.txt指令,或者使用cat demo.txtcat demo.de.txt来查看这两个文件内容是否相同。
好了,到这里我们通过一个示例介绍了gpg的一个使用方式,至于更多的使用方法可以去研究参考博客深入学习。

posted @ 2021-12-15 20:58  シバ鳥  阅读(29)  评论(0编辑  收藏  举报