一、什么是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. url两次编码

    encodeURI函数采用UTF-8对URL进行编码,所以如果服务器在进行解码时使用的是其他的编码方式就会出现乱码,默认的服务器配置的解码字符集都不是UTF-8,所以大部分情况下地址栏提交中文查询参数 ...

  2. 在UnrealEngine中用Custom节点实现描边效果

    在<Real Time Rendering, third edition>一书中,作者把描边算法分成了5种类型.1.基于观察角度与表面法线的轮廓渲染.缺点很明显.2.过程式几何轮廓渲染.即 ...

  3. BZOJ.2597.[WC2007]剪刀石头布(费用流zkw)

    BZOJ 洛谷 \(Description\) 给定一张部分边方向已确定的竞赛图.你需要给剩下的边确定方向,使得图中的三元环数量最多. \(n\leq100\). \(Solution\) 这种选择之 ...

  4. [USACO18DEC]Cowpatibility

    Description: Farmer John 的 \(N\) 头奶牛(\(2\le N\le 5\times 10^4\))各自列举了她们最喜欢的五种冰激凌口味的清单.为使这个清单更加精炼,每种可 ...

  5. [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)

    无聊学了一下珂朵莉树 珂朵莉树好哇,是可以维护区间x次方和查询的高效数据结构. 思想大致就是一个暴力(相对而言)的树形数据结构 lxl毒瘤太强了,发明了ODT算法(Old Driver Tree老司机 ...

  6. 选择客栈 [NOIP 2011]

    这种题我还要发博客我真是太弱蒻了 Description 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从1 到n 编号.每家客栈都按照某一种色调进行装饰(总共k 种,用整数0 ~ k-1 表示) ...

  7. R图表入门

    R图表入门 R语言最强的功能就是统计和作图了,在学习了基本语法之后,博主马上体验了一下R的图表功能 条形图 例1 H = c(7,12,28,3,41) M = c("Mar",& ...

  8. c#中base64加密解密

    using System;using System.Text; namespace Common{/// <summary>/// 实现Base64加密解密/// </summary ...

  9. react-native Execution failed for task ':app:prepareRnReduxReactNativeUpdateUnspecifiedLibrary'报错

    详细报错 Could not copy zip entry E:\项目目录\node_modules\react-native-update\android\build\outputs\aar\rea ...

  10. js文档节点关系

    这一节简单介绍一下文档节点方面的相关内容: 一:获得节点关系的属性 1.获得该元素父节点的引用:obj.parentNode: <div class="content"> ...