001-GPG入门教程
对信息加密和解密。需要用到GnuPG软件(简称GPG),它是目前最流行、最好用的加密工具之一。
一、什么是GPG
要了解什么是GPG,就要先了解PGP。
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
GPG有许多用途,本文主要介绍文件加密。至于邮件的加密,不同的邮件客户端有不同的设置,请参考Ubuntu网站的介绍。
二、安装
GPG有两种安装方式。
方式一、可以下载源码,自己编译安装。
./configure
make
make install
方式二、二进制安装
下载:https://www.gnupg.org/download/index.en.html
工具套件地址:https://gpgtools.org/
三、生成密钥
1、生成
安装成功后,使用gen-ken参数生成自己的密钥。
gpg --gen-key
需要输入证书类型,个人信息、邮箱、密码等【不同版本有所区别】
其中
gpg: 密钥 13BEFC08265E6B07 被标记为绝对信任
gpg: directory '/Users/lihongxu6/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/Users/lihongxu6/.gnupg/openpgp-revocs.d/E008E7EA8FFA671D2DE1817A13BEFC08265E6B07.rev'
公钥和私钥已经生成并经签名。 pub rsa2048 2018-11-14 [SC] [有效至:2020-11-13]
E008E7EA8FFA671D2DE1817A13BEFC08265E6B07
uid lihongxu <bjlhx15@163.com>
sub rsa2048 2018-11-14 [E] [有效至:2020-11-13]
请注意上面的字符串"13BEFC08265E6B07",这是"用户ID"的Hash字符串,可以用来替代"用户ID"。
2、吊销证书
这时,最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥。
gpg --gen-revoke [用户ID]
上面的"用户ID"部分,可以填入你的邮件地址或者Hash字符串
四、密钥管理
4.1 列出密钥
list-keys参数列出系统中已有的密钥.
gpg --list-keys
输出
gpg: 正在检查信任度数据库
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2020-11-13 进行
/Users/lihongxu6/.gnupg/pubring.kbx
-----------------------------------
pub dsa2048 2010-08-19 [SC] [有效至:2020-06-15]
85E38F69046B44C1EC9FB07B76D78F0500D026C4
uid [ 未知 ] GPGTools Team <team@gpgtools.org>
sub elg2048 2010-08-19 [E] [有效至:2020-06-15]
sub rsa4096 2014-04-08 [S] [有效至:2024-01-02] pub rsa2048 2018-11-14 [SC] [有效至:2020-11-13]
E008E7EA8FFA671D2DE1817A13BEFC08265E6B07
uid [ 绝对 ] lihongxu <bjlhx15@163.com>
sub rsa2048 2018-11-14 [E] [有效至:2020-11-13]
第一行显示公钥文件名(pubring.gpg),第二行显示公钥特征(4096位,Hash字符串和生成时间),第三行显示"用户ID",第四行显示私钥特征。
4.2、删除key
如果你要从密钥列表中删除某个密钥,可以使用delete-key参数。
gpg --delete-key [用户ID]
如果提示删除私钥使用:
gpg --delete-secret-keys 用户ID
4.3、输出密钥
公钥文件(.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
"用户ID"指定哪个用户的公钥,output参数指定输出文件名(public-key.txt)。
类似地,export-secret-keys参数可以转换私钥。
gpg --armor --output private-key.txt --export-secret-keys
4.4 上传公钥
公钥服务器是网络上专门储存用户公钥的服务器。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签名文件。你可以根据它的说明,验证这些下载包是否为真。
原文地址:http://www.ruanyifeng.com/blog/2013/07/gpg.html
001-GPG入门教程的更多相关文章
- GPG入门教程
原文地址:http://www.ruanyifeng.com/blog/2013/07/gpg.html 作者: 阮一峰 日期: 2013年7月12日 前两篇文章,我介绍了RSA算法. 今天,就接着来 ...
- GPG入门 - 练习笔记
GPG入门练习笔记 参考阮一峰的GPG入门教程http://www.ruanyifeng.com/blog/2013/07/gpg.html 1.加密 1)刘言机器: 用王老师公钥加密gp ...
- 超强、超详细Redis数据库入门教程
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...
- 【转载】GBDT(MART) 迭代决策树入门教程 | 简介
转载地址:http://blog.csdn.net/w28971023/article/details/8240756 GBDT(Gradient Boosting Decision Tree) 又叫 ...
- 转:GBDT(MART) 迭代决策树入门教程 | 简介
在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又 叫 MART(Multiple Additive R ...
- 16-GDBT(MART) 迭代决策树入门教程 | 简介
转载:http://blog.csdn.net/w28971023/article/details/8240756 GBDT(Gradient Boosting Decision Tree) 又叫 M ...
- 超强、超详细Redis数据库入门教程(转载)
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...
- 超强、超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...
- 超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...
- mui初级入门教程(三)— html5+ XMLHttpRequest 与mui ajax用法详解
文章来源:小青年原创发布时间:2016-05-29关键词:mui,html5+,XMLHttpRequest,ajax,懒加载转载需标注本文原始地址: http://zhaomenghuan.gith ...
随机推荐
- 使用session防止表单进行重复提交
我们都知道可以通过js的方法来实现防止表单重复提交,但是js只适用于“在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交” 的情况下进行操作, 那如果碰到“表单提交后用户点击[刷新 ...
- React Native 入门到原理(详解)
抛砖引玉(帮你更好的去理解怎么产生的 能做什么) 砖一.动态配置 由于 AppStore 审核周期的限制,如何动态的更改 app 成为了永恒的话题.无论采用何种方式,我们的流程总是可以归结为以下三部曲 ...
- 原生js(一)
Element对象有以下重要属性: 1.style. a) Element的css样式 b) 可以通过elem.style.backgroundColor = "red"的形式才动 ...
- Android Studio 3.1.2 版本包下载
Android Studio 3.1.2 bug 修复版已发布,本次更新修复了一些错误,并改进了某些场景下 lint 审查的速度.详细的修复内容请查看 Android Studio 3.1.2 的发布 ...
- [Offer收割]编程练习赛13 B.最大子矩阵[枚举]
#1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该 ...
- 如何在Computer下添加System Folder
1.创建一个GUID标识该系统目录,比如:{7854FF7A-470F-4D04-9FC5-4CFC7B2A0E89}.下面的操作步骤将全部使用这个示例GUID. 2.打开注册表编辑器(Registr ...
- PHP服务器访问优化
常规的优化措施: 磁盘写入,网络安全,证书加密,CPU,内存,DNS解析,数据库优化,页面gzip压缩 PHP gzip压缩打开: 打开php目录下的php.ini文件,找到zlib.output_c ...
- Windows任务计划的设置
需求:因为要定时跑一些exe的小程序,来定时执行项目内的某段代码.所以需要建一个任务计划 1. 2. 3.
- python unittest框架中addCleanup函数详解
接上一篇doCleanups说明,这次介绍下另一个很好用的函数:addCleanup 还是老规矩,看官方文档说明: addCleanup(function, *args, **kwargs)¶ Add ...
- Nodejs express、html5实现拖拽上传
一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs ...