一、什么是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. C#中form窗体之间的传递几个方法

  2. SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)

    题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...

  3. (Android数据传递)应用之间的交互

    一个Android App 通常会有多个Activity.每个Activity的界面都扮演者用户入口的角色,允许用户执行一些特定的任务(例如:查看地图或者拍照等).为了让用户能够从一个Activity ...

  4. python字符串面试题:找出一个字符串中第一个字母和最后一个字符是第一次重复,中间没有重复且最长的子串

    1.给出任意一个字符串,打印一个最长子串字符串及其长度,如果有相同长度的子字符串,都要一起打印出来,该子字符串满足以下条件, 第一个字母和最后一个字符是第一次重复 这个子字符串的中间字母没有重复 这个 ...

  5. 列表去重几种方法 python

    1.方法一: >>> a=[1,1,2,2,3,3] >>> b=[] >>> for i in a: ...     if i not in b ...

  6. seq_file学习(2)—— seq_file

    li {list-style-type:decimal;}ol.wiz-list-level2 > li {list-style-type:lower-latin;}ol.wiz-list-le ...

  7. Android:困扰了我一个晚上的问题 Failed to resolve: com.android.support:recyclerview-v7.25.3.1

      为了解决这个问题,做了各种尝试: 1)重装sdk: 2)重装android studio: 最终发现是一个标点符号搞错了,如下:   而且通过查找这个问题,了解到: 1)sdk路径,<use ...

  8. Jetpack 架构组件 Paging 分页加载 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. spring rest 容易被忽视的后端服务 chunked 性能问题

    spring boot 容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 作者:王清培(Plen wang) 沪江Java资 ...

  10. dlib的编译和安装

    之前写过python dlib依赖的安装,安装过程还算比较复杂,还需要安装boost.Python依赖等,但是如果纯粹的编译C++的dlib库,则要简单得多,基本上不需要其他外部的依赖,这里简单叙述一 ...