一、什么是GPG

  要了解什么是GPG,就要先了解PGP。

  1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。

  GPG有许多用途,本文主要介绍文件加密。本文的使用环境为Linux命令行。如果掌握了命令行,Windows 或 Mac OS 客户端,就非常容易掌握。

二、使用GPG

1.创建密钥

gpg --gen-key

  第一段是版权声明,然后让用户自己选择加密算法。默认选择第一个选项RSA,表示加密和签名都使用RSA算法,目前来说,RSA算法是安全性最强的。我们输入1,然后回车

  然后会让我们配置密钥的加密长度。RSA 密钥长度应在 1024 ~ 4096 位之间,默认是2048。密钥的长度越长,安全性越高,但是加密和解密的速度就越慢。在此我们使用默认配置2048。

  接下来设置密钥的有效期,默认值0代表永不过期。然后会让我们确认密钥的有效期,直接输入y继续。如果想设置在密钥2年后过期,那么应该输入2y,然后回车,其他类推。

  输入y确认之后,会要求我们输入个人信息来构造用户ID,按顺序为:真实姓名、Email地址、注释,其中注释可以为空。

  然后用户ID就生成好了,此时会向你确认信息是否需要修改:输入N修改姓名,C修改注释,E修改Email,O表示确认,Q退出。我输入字母O确认。

  然后需要设置一个密码来保护我们的私钥。这里输入密码的时候,不会在控制台上显示出来。

  然后我们的公、私钥就已经生成好并签名完成。

  公钥:pubring.gpg,私钥:secring.gpg。其中生成公钥的密钥ID是:7A701106,私钥的ID为:BBA3B083。其中密钥ID即为公钥ID,也可以作为用户ID,。这里有两处需要记住,第一就是设置的私钥密码,第二就是生成公钥的密钥ID。私钥密码是解密时需要的。密钥ID是对文件进行加密需要的。

  到此为止,我们已经完成了生成公钥和私钥的任务了。这时,最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销我们的公钥。

  然后会让我们设置吊销原因,输入描述(可选);以空白行结束:

     = 未指定原因
= 密钥已泄漏
= 密钥被替换
= 密钥不再使用
Q = 取消

这里需要输入我们设置的私钥保护密码,才能解开私钥

上面一段的翻译,就是说让我们保护好这个证书文件。,翻译过来大概是这个意思

请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这
份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏
到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万
小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他人也能够看得到的地方!

2.密钥管理

(1)参数列出系统中已有的密钥

gpg -k 或者 gpg --list-keys           //列举公钥
gpg -K 或者 gpg --list-secret-keys   //列举私钥

(第一行是公钥文件路径,第二行是公钥信息,第三行是用户ID,第四行是私钥信息。)

(2)删除密钥

gpg --delete-key [用户ID]         # 删除公钥
gpg --delete-secret-keys [用户ID]    # 删除私钥

(3)导出密钥

  公钥和私钥(gpg文件)都是以二进制形式存储,使用--armor参数可以导出为ASCII码形式。

  导出公钥文件

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

  导出私钥文件

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

3.加密解密

(1)公钥加密

假定有一个压缩文件test.zip,我们对它进行加密。

  gpg --recipient [用户ID] --output test.zip.gpg --encrypt test.zip

encrypt参数表示对文件进行加密,encrypt参数指定源文件。recipient参数指定接收者的公钥,output参数指定加密后的文件名,

运行上面的命令后,test.zip.gpg就是已加密的文件。

(2)私钥解密

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

  gpg --output test2.zip --decrypt test.zip.gpg 

output参数指定解密后生成的文件。decrypt参数指定需要解密的文件。解密文件保存为test2.zip。

参考

https://www.jianshu.com/p/268064e67719

https://www.jianshu.com/p/1257dbf3ed8e

GPG的更多相关文章

  1. GPG终极指南(加密/签名)

    我们平时都听过非对称加密,公钥和私钥,签名验证,但这些证书都是怎么得到的呢?本篇文章会解答这些问题. 背景介绍 加密的一个简单但又实用的任务就是发送加密电子邮件.多年来,为电子邮件进行加密的标准一直是 ...

  2. 使用 gpg 加密文件 - 通过 shell 或 php

    使用 gpg 加密文件 - 通过 shell 或 php 背景:客户提供私钥,并要求我方通过php把加密后的文件传输给他们. 环境 macOS Sierra 10.12.1 php 7.0.8 0.安 ...

  3. Ubuntu 更新源失败[GPG error]

    对于错误 GPG error: http://ppa.launchpad.net precise Release: The following signatures couldn't be verif ...

  4. Ubuntu W: GPG error: http://archive.ubuntukey....NO_PUBKEY 8D5A09

    在用 sudo apt-get update 时出现这样的报错: W: GPG error: http://archive.ubuntukylin.com:10006/ubuntukylin xeni ...

  5. 烂泥:gpg加解密软件学习

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真 ...

  6. 使用 GPG 对数据进行加密解密签名

    一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...

  7. 我的qq邮箱的GPG公钥

    呵呵,赶一波潮流,我的邮箱 175420840@qq.com 的GPG公钥如下,也可以在这里直接下载.具体可参见阮一峰的<GPG入门教程>. -----BEGIN PGP PUBLIC K ...

  8. gpg的一些常用操作

    (1)列出keys # gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub   2048R/98681A63 2 ...

  9. Maven 简单配置gpg

    1. 下载maven到指定目录,指定对应的gpg的执行命令所需要的属性.这里比如下载解压后的maven目录是: C:\maven-apache-3.3.2 ,那么配置文件目录是: C:\maven-a ...

  10. [git]使用GPG签名你的commit

    概述 GPG是一种加密算法,现在github支持commit使用GPG加密,从而保证提交的commit在传输的过程中没有被篡改. 一.生成GPG密钥 什么是GPG:阮一峰的GPG教程 安装GPG:br ...

随机推荐

  1. H5 唤起 APP的解决方案

    H5 页面唤起APP或跳转到下载APP的某个链接地址.总结如下: 在 IOS 中, 系统版本在 8 以下时,可以监听页面的 pagehide / visibilitychange 事件. 系统版本大于 ...

  2. Codeforces.487C.Prefix Product Sequence(构造)

    题目链接 \(Description\) 对于一个序列\(a_i\),定义其前缀积序列为\(a_1\ \mathbb{mod}\ n,\ (a_1a_2)\ \mathbb{mod}\ n,...,( ...

  3. 生产者与消费者 代码实现 java

    首先,我利用忙测试写出了第一次版本的代码 package How; //自写代码 缺陷 无法完全实现pv操作线程处于忙测试状态 public class bin_1_1 { public static ...

  4. Markdown指南

    Markdown 指南 前几天学习了markdown,然后一直在用,很喜欢这种格式即内容的写作形式.在简书写了几篇,对固定链接的格式很不满意,于是寻找能够支持markdown.固定链接显格式.支持自定 ...

  5. 线段树及Lazy-Tag

    一:线段树 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点.使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(lo ...

  6. Jmeter接口测试实例2-获取所有学生信息

    Jmeter实例2:获取所有学生信息 添加http协议—添加IP.路径.方法,添加信息头管理器,察看结果树,运行 如下图所示,响应结果中获取到所有学生信息

  7. 穷举法、for循环、函数、作用域、斐波那契数

    1.穷举法 枚举所有可能性,直到得到正确的答案或者尝试完所有值. 穷举法经常是解决问题的最实用的方法,它实现起来热别容易,并且易于理解. 2.for循环 for语句一般形式如下: for variab ...

  8. poj3087 Shuffle'm Up(bfs)

    http://poj.org/problem?id=3087 注意复制字符串的时候,要在末尾加上'\0',否则导致strcmp出错. 还有就是开数组大小的时候看清楚一点,别开错了debug了好久. # ...

  9. fzu1050 Number lengths(对数公式)

    http://acm.fzu.edu.cn/problem.php?pid=1050 cmath头文件里有两种对数log()和log10(),一个是自然对数,一个是以10为底, 求n!的位数,根据对数 ...

  10. Deepin 15.4 破解安装 SecureFX-7.3 失败

    参考先前的文章(Ubuntu 14 安装并破解SSH工具 SecureCRT),破解安装 SecureCRT-7.3  成功,但是破解安装 SecureFX-7.3 时就一直报错: Insuffici ...