GPG密钥的生成与使用

简介: GPG密钥的生成与使用

一、引言


最近在对接银行向的时候,行内要求采用PGP方式对数据文件进行加密,首先我们需要生成密钥对,然后导出公钥给对方,导出  

私钥以供后面程序解密使用。


关于GPG基本的介绍,在这里就不介绍了,大家自行百度就行了,本文主要分享项目中用的干货。


二、创建密钥对


$ gpg --gen-key


操作实例:

[fan 18:58:33]~$ gpg --gen-key 
gpg (GnuPG) 1.4.20; Copyright (C) 2015 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 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048) 4096
您所要求的密钥尺寸是 4096 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 
密钥永远不会过期
以上正确吗?(y/n) y
您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合
成用户标识,如下所示:
    “Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”
真实姓名: Fan
电子邮件地址: fan@qq.com
注释: github
您选定了这个用户标识:
    “Fan(github) <fan@qq.com>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O
您需要一个密码来保护您的私钥。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
....+++++
随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!
(还需要184字节)
+++++
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!
(还需要231字节)
...+++++
随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!
(还需要170字节)
+++++
gpg: 密钥 2DBA87CF 被标记为绝对信任
公钥和私钥已经生成并经签名。
gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   4096R/2DBA87CF 2017-04-11
      密钥指纹 = 3C00 AC7B 3D06 E22E AEDE  72B0 B28F ACA4 2EBC 87DF
uid                  Fan (github) <fan@qq.com>
sub   4096R/873278A9 2017-04-11
gpg key已经生成
----------------------------------------------
# 后续操作
# 列出密钥
[fan 19:24:44]~$ gpg --list-secret-keys --keyid-format LONG
# 最好制作一张撤销证书,用于密钥作废,请求外部公钥服务器撤销你的公钥
# 将二进制的公钥(私钥)导出为ASSCII码
# 上传公钥到公钥服务器。这里使用阮一峰的命令有一些问题,但可以正常工作
gpg --send-keys [用户ID]
# 生成用于公布的公钥指纹(用于他人校验)
gpg --fingerpint [用户ID]
密钥指纹 = 3C00 AC7B 3D06 E22E AEDE  72B0 B28F ACA4 2EBC 87DF


上面将在生成秘钥过程中每一步需要做的事情进行了说明,大家按照说明就可以生成秘钥了。


三、导出秘钥并备份


导出公钥


gpg --armor --output public-key-gmail.txt --export MASTERKEYID


导出私钥:


gpg --armor --output secret-key-gmail.txt --export-secret-keys MASTERKEYID


注意:上面的MASTERKEYID 代表的是 主key_id,可以填写我们生成密钥的时候 输入的 名字


四、密钥管理


4.1 列出密钥


list-keys参数列出系统中已有的密钥.


  gpg --list-keys


显示结果如下:


/home/ruanyf/.gnupg/pubring.gpg
  -------------------------------
  pub 4096R/EDDD6D76 2013-07-11
  uid Ruan YiFeng <yifeng.ruan@gmail.com>
  sub 4096R/3FA69BE4 2013-07-11

第一行显示公钥文件名(pubring.gpg),第二行显示公钥特征(4096位,Hash字符串和生成时间),第三行显示"用户ID",第四行显示私钥特征。


如果你要从密钥列表中删除某个密钥,可以使用delete-key参数。


 gpg --delete-key [用户ID]


4.2 输出密钥


公钥文件(.gnupg/pubring.gpg)以二进制形式储存,armor参数可以将其转换为ASCII码显示。


gpg --armor --output public-key.txt --export [用户ID]


"用户ID"指定哪个用户的公钥,output参数指定输出文件名(public-key.txt)。


类似地,export-secret-keys参数可以转换私钥。


 gpg --armor --output private-key.txt --export-secret-keys


4.3 上传公钥


公钥服务器是网络上专门储存用户公钥的服务器。send-keys参数可以将公钥上传到服务器。


  gpg --send-keys [用户ID] --keyserver hkp://subkeys.pgp.net


使用上面的命令,你的公钥就被传到了服务器subkeys.pgp.net,然后通过交换机制,所有的公钥服务器最终都会包含你的公钥。


由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。fingerprint参数生成公钥指纹。


 gpg --fingerprint [用户ID]


4.4 输入密钥


除了生成自己的密钥,还需要将他人的公钥或者你的其他密钥输入系统。这时可以使用import参数。


  gpg --import [密钥文件]


为了获得他人的公钥,可以让对方直接发给你,或者到公钥服务器上寻找。


 

gpg --keyserver hkp://subkeys.pgp.net --search-keys [用户ID]


正如前面提到的,我们无法保证服务器上的公钥是否可靠,下载后还需要用其他机制验证.


五、加密和解密


5.1 加密


假定有一个文本文件demo.txt,怎样对它加密呢?

encrypt参数用于加密。


gpg --recipient [用户ID] --output demo.en.txt --encrypt demo.txt


recipient参数指定接收者的公钥,output参数指定加密后的文件名,encrypt参数指定源文件。运行上面的命令后,demo.en.txt就是已加密的文件,可以把它发给对方。


5.2 解密


对方收到加密文件以后,就用自己的私钥解密。


  gpg --decrypt demo.en.txt --output demo.de.txt


decrypt参数指定需要解密的文件,output参数指定解密后生成的文件。运行上面的命令,demo.de.txt就是解密后的文件。


GPG允许省略decrypt参数。


 gpg demo.en.txt


运行上面的命令以后,解密后的文件内容直接显示在标准输出。


六、签名


6.1 对文件签名


有时,我们不需要加密文件,只需要对文件签名,表示这个文件确实是我本人发出的。sign参数用来签名。


gpg --sign demo.txt


运行上面的命令后,当前目录下生成demo.txt.gpg文件,这就是签名后的文件。这个文件默认采用二进制储存,如果想生成ASCII码的签名文件,可以使用clearsign参数。


gpg --clearsign demo.txt


运行上面的命令后 ,当前目录下生成demo.txt.asc文件,后缀名asc表示该文件是ASCII码形式的。


如果想生成单独的签名文件,与文件内容分开存放,可以使用detach-sign参数。


gpg --detach-sign demo.txt


运行上面的命令后,当前目录下生成一个单独的签名文件demo.txt.sig。该文件是二进制形式的,如果想采用ASCII码形式,要加上armor参数。


gpg --armor --detach-sign demo.txt


6.2 签名+加密


上一节的参数,都是只签名不加密。如果想同时签名和加密,可以使用下面的命令。


gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txt


local-user参数指定用发信者的私钥签名,recipient参数指定用接收者的公钥加密,armor参数表示采用ASCII码形式显示,sign参数表示需要签名,encrypt参数表示指定源文件。


6.3 验证签名


我们收到别人签名后的文件,需要用对方的公钥验证签名是否为真。verify参数用来验证。


gpg --verify demo.txt.asc demo.txt


举例来说,openvpn网站就提供每一个下载包的gpg签名文件。你可以根据它的说明,验证这些下载包是否为真。


20200313105311217.png

目录
相关文章
离线安装htop
离线安装htop
1375 0
|
Ubuntu 开发工具
Ubuntu更换阿里云软件源
Ubuntu更换阿里云软件源
144905 0
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
267085 0
|
8月前
|
Ubuntu Linux Shell
Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
以上就是在Linux环境下安装VSCode的终极指南,抛开繁复的专业词汇,以平易近人的文字、形象生动的比喻让你轻松学会这一过程。别忘了,你的小伙伴VSCode已经在应用菜单里等你了!
2488 23
|
Java Shell Maven
JAVA实现PGP/GPG加解密加验签
JAVA实现PGP/GPG加解密加验签
3210 0
|
Linux 开发工具
Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
865 3
|
Unix Linux 开发工具
git中有关old mode 100644、new mode 10075的问题解决小结
在 Git 中处理文件权限变更时,理解 `old mode 100644` 和 `new mode 100755` 的含义是解决问题的关键。通过确认变更的合理性、修改不必要的权限变更,以及配置 Git 忽略权限变更,可以有效管理文件权限,确保版本库的稳定性和一致性。
1536 3
|
存储 物联网 数据安全/隐私保护
Docker安装Mosquitto
这篇文章详细介绍了如何在Docker中安装和配置Mosquitto消息代理服务,包括拉取镜像、创建容器以及配置持久化存储等步骤。
2086 0
Docker安装Mosquitto
|
网络协议 Ubuntu Linux
gpg从公钥服务器接收失败(gpg: keyserver receive failed: Server indicated a failure)
通过上述步骤,大多数情况下应该能够解决GPG从公钥服务器接收失败的问题。如果问题依旧存在,可能需要进一步调查与公钥服务器相关的更深层次的技术问题,或者考虑在相关社区论坛寻求帮助。
3331 1
|
Linux KVM 虚拟化
windwos上通过qemu直接开启img、qcow2等格式磁盘镜像(无需转vmdk)
QEMU 是一款开源虚拟化软件,支持多种硬件平台和虚拟化技术,如 KVM 加速。它可以在 Windows、Linux 和 macOS 上运行。本文介绍了 QEMU 的下载、安装、配置虚拟网卡、启动虚拟机、网络通信及快照管理等步骤。通过 QEMU,用户可以轻松创建和管理虚拟机,实现高效的开发和测试环境。
6757 0
windwos上通过qemu直接开启img、qcow2等格式磁盘镜像(无需转vmdk)