GPG非对称加密

Posted 北橘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPG非对称加密相关的知识,希望对你有一定的参考价值。

我们需要两个账户进行操作,user1、use2;#这个实验需要我们在图形机上去做;

1.创建加密文件

[user1@logan ~]$ echo hello user2 > a.txt
[user1@logan ~]$ ls
a.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

2.我们要去user2中生成密钥对

复制代码
[user2@logan ~]$ gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 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.

请选择您要使用的密钥种类:  default
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择? 
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)1024
您所要求的密钥尺寸是 1024 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

真实姓名:user2
电子邮件地址:user2@123.com
注释:test user2
您选定了这个用户标识:
    “user2 (test user2) <user2@123.com>”

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

复制代码
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: /home/user2/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 37EC7F7B 被标记为绝对信任
公钥和私钥已经生成并经签名。

gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   1024R/37EC7F7B 2019-07-26
密钥指纹 = 77B9 AE56 4E9D 2DB4 E2BE  6834 F9A5 E748 37EC 7F7B
uid                  user2 (test user2) <user2@123.com>
sub   1024R/5B9E893A 2019-07-26
复制代码

3.查看一下我们的密钥对

复制代码
这是公钥
[user2@logan ~]$ gpg --list-key /home/user2/.gnupg/pubring.gpg ------------------------------ pub 1024R/37EC7F7B 2019-07-26 uid user2 (test user2) <user2@123.com> sub 1024R/5B9E893A 2019-07-26
复制代码
复制代码
这是私钥
[user2@logan ~]$ gpg --list-secret-key /home/user2/.gnupg/secring.gpg ------------------------------ sec 1024R/37EC7F7B 2019-07-26 uid user2 (test user2) <user2@123.com> ssb 1024R/5B9E893A 2019-07-26
复制代码

4.我们需要把公钥从钥匙环中摘出来

复制代码
[user2@logan ~]$ gpg --export --armor > /tmp/user2.key
[user2@logan ~]$ cat /tmp/user2.key 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mI0EXTq0tQEEANIThJw/IH4HgrVsYj+rY1qQL0m/2eFr0cchZPASqhexCSpSEviw
ciMH1DePWUN+p8EYcYrwXd8gn+lMd3ExOR5T1sVPCK5nbUJ1RPA9P9autWz7FgtV
fkpWmvtJ7XlO6bvzGziPMMabEB4X2+KzpLsjud8kNXUlHF0kYrT/qqk9ABEBAAG0
InVzZXIyICh0ZXN0IHVzZXIyKSA8dXNlcjJAMTIzLmNvbT6IuQQTAQIAIwUCXTq0
tQIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEPml50g37H97/GwD/jOo
MPm/ot6y3BWmrFnZA4X5jVry5/XBTSUBFHzSom0rqOWPJs1tmNjCfbCY54bnX3an
bX6PloWuAzp+w0FDN1/BlbUnFkW7pqABJJev731DXzVairzyWw/BsgN7/hsS6PIT
llAOeSINCBPqM1Nqh1wgBbnCnlVOuVNiCK5wj3ARuI0EXTq0tQEEAJZVzRbWU8DR
2j7HDQVKSuyjcN1pUd3gyR/tlg107dpD1HcoB3KTUvrX4QvSMHx3YyDnNDSSJGrc
Z8dpoJfxH5jTynY533Tu6+ri1sskQqQo7iEBDYloAqspTx1LsdKnhQirJbjfSuCD
AI81TuLA1fusDZwex8wgyFqVkrmF6a4nABEBAAGInwQYAQIACQUCXTq0tQIbDAAK
CRD5pedIN+x/e8O1BACcwpTEoE6Yt7EVTZuTEQJJdQX2DsQqYj7aO7ptGVAyZBlu
lJ5v3okuodQGG5a/Kvd8J/sbEIWyt1u8QzxAwvLf9J6OkYBCQ2NeV/9/5fPPuZM7
PtMTQJF6i/2QLb/pxTgoEpO3wgL0GjXqv6hBsguIyJ3uevKkaq9Y1wOINnvP1Q==
=2Gbd
-----END PGP PUBLIC KEY BLOCK-----
复制代码

5.user1 需要用user2的公钥加密自己的文件

[user1@logan ~]$ cp /tmp/user2.key .
[user1@logan ~]$ ls
a.txt  user2.key  公共  模板  视频  图片  文档  下载  音乐  桌面

6.将公钥挂到自己的钥匙环中

复制代码
[user1@logan ~]$ gpg --import user2.key 
gpg: 已创建目录‘/home/user1/.gnupg’
gpg: 新的配置文件‘/home/user1/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/user1/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/user1/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/user1/.gnupg/pubring.gpg’已建立
gpg: /home/user1/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 37EC7F7B:公钥“user2 (test user2) <user2@123.com>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)
复制代码

7.对需要加密的文件进行加密

复制代码
[user1@logan ~]$ gpg --encrypt --armor -r user2 a.txt
gpg: 5B9E893A:没有证据表明这把密钥真的属于它所声称的持有者

pub  1024R/5B9E893A 2019-07-26 user2 (test user2) <user2@123.com>
 主钥指纹: 77B9 AE56 4E9D 2DB4 E2BE  6834 F9A5 E748 37EC 7F7B
 子钥指纹: 6F18 58F2 B6BC 037A A14D  69E6 3E94 8284 5B9E 893A

这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。

无论如何还是使用这把密钥吗?(y/N)y
[user1@logan ~]$ ls
a.txt  a.txt.asc  user2.key  公共  模板  视频  图片  文档  下载  音乐  桌面    生成了加密文件a.txt.asc
复制代码

8.将加密后的文件交给user2

[user1@logan ~]$ mv a.txt.asc /tmp/
[user1@logan ~]$ ls /tmp/
a.txt.asc  user2.key

9.user2解密,这里我们需要输入私钥密码;

复制代码
[user2@logan ~]$ ls
a.txt.asc
[user2@logan ~]$ gpg a.txt.asc 

您需要输入密码,才能解开这个用户的私钥:“user2 (test user2) <user2@123.com>”
1024 位的 RSA 密钥,钥匙号 5B9E893A,建立于 2019-07-26 (主钥匙号 37EC7F7B)

gpg: 由 1024 位的 RSA 密钥加密,钥匙号为 5B9E893A、生成于 2019-07-26
      “user2 (test user2) <user2@123.com>”
[user2@logan ~]$ ls
a.txt  a.txt.asc     我们的文件解密完成
复制代码

9.验证

[user2@logan ~]$ cat a.txt
hello user2

实验完成;

以上是关于GPG非对称加密的主要内容,如果未能解决你的问题,请参考以下文章

通过GPG非对称加密工具验证ECharts发布版本实例演示,win10下Gnu Privacy Guard工具的安装和使用方法

利用Gpg4win来打造一个安全的加密文件

安全与加密-使用gpg实现加密与解密

安全和加密——openssl及自建CA

openssl加解密原理

GnuPG