GpG使用指南
1. 简介
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
GPG是自由软件基金会的GNU计划的一部分,目前受德国政府资助加密技术可以保证你的文件使用加密形式存储,不管你是要把它公开到因特网,备份到服务器,用U盘携带,还是保存在笔记本里。加密你的数据,意味着除非是你认可的接收者,其他人都不可以读取,这样可以防止信息泄漏。
GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。
2. 安装
Linux操作系统:
如今大多数的linux发行版都默认包含了gpg,可用如下命令进行检查:
|
# gpg --version |

可看到如图所示的版本信息,就直接可以使用了。否则,你需要从你的发行版软件仓库里安装GPG。
Mac操作系统:
|
安装brew命令 $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装gnupg $ brew install gnupg |
Windows下可以借助gpg4win软件来实现密钥的生成,具体过程自己摸索,下载地址:https://www.gpg4win.org/
3. 生成密钥
|
# gpg --gen-key |
生成密钥时会出现一大段文字:先是关于软件的介绍和一些版权信息,然后询问你选择哪种加密算法,我选择默认的RSA and RSA,因为目前来说,RSA算法是安全性最强的,它可以用来加密和解密,其他的只能给信息签名。

接下来会询问密钥长度,默认是2048,直接回车就可以,也可以自己选择长度。如下所示:


接下来询问你密钥的有效期,默认值0代表永不过期,我选择默认值。接下来会让你确认一下是否正确。输入y确认之后,要求你输入个人信息,软件通过真实姓名、Email地址和注释来构造用户ID,其中注释可以为空。

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

之后会要求你输入一个口令用以保护你的私钥,强烈建议添加口令!


然后软件说“需要生成大量随机字节”,你可以随意进行一些操作,看看网页啊,打打字什么的,“这会得到足够的熵”(熵在物理学中是微观状态混乱度的度量)。

现在,你的公、私钥已经生成并签名!

其中B9F82B1D是用户ID的hash,可以代替用户ID。最后,建议再生成一个撤销证书,以便以后密钥作废时,请求公钥服务器撤销你的公钥:
|
# gpg --ken-revoke [用户ID] |
4 、密钥管理
列出密钥
|
# gpg --list-keys |

上传公钥至密钥服务器
密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。避免了把公钥直接拷贝给其他人的过程。
|
1.上传你的公钥到秘钥服务器: # gpg --send-keys [your pubID] --keyserver [keyservers.address.com] (需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步)) 加密文件 法一: # gpg -o encrypted_file.gpg --encrypt -r key-id original.file 命令解释: (1)-o encrypted_file.gpg = 指定输出文件 (2)--encrypt = 做加密 (3)-r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。 (4)original.file = 指定要加密的文件 法二: # gpg --recipient [your pubID]--output out.file --encrypt original.file |
|
# gpg --send-keys [用户ID] --keyserver hkp://subkeys.pgp.net |

在另一台服务器上搜索刚才上传的公钥:
|
# gpg --search-keys [用户ID] |

5. 加密文件
加密之前首先得知道对方的公钥,用公钥来加密文件,对方用自己的私钥来解密。可用对方的邮箱搜索他的公钥
| # gpg --list-key wangd8836@gmail.com |

加密法一:
|
# gpg --recipient 49FD19FB --output haha.txt --encrypt haha |

加密法二:
|
# gpg -o encrypted_520.haha --encrypt -r 49FD19FB haha |

将加密后的文件传至另一台服务器

6. 解密文件
|
# gpg --decrypt filename.gpg |

7. 删除密钥
查看密钥
|
# gpg --list-keys |

删除公钥:
|
# gpg --delete-secret-keys 71FBED38 |

查看一次密钥:
|
# gpg --list-keys |

发现要删除的密钥还在,因为你仅仅删除了私钥而已。此时再删除公钥:
|
# gpg --delete-key 71FBED38 |

再次查看密钥:
|
# gpg --list-keys |

8. 签名
|
# gpg --clearsign haha.txt |
这会在当前目录下生成一个名为vps.asc的文件,--clearsign参数表示生成ASCII形式的签名文件,而使用--sign参数生成的文件名为vps.gpg,以二进制形式存储。
通过--verify参数使用对方的公钥进行签名验证:
|
# gpg --sign haha.txt |
9. 验证文件完整性
|
# gpg --verify haha.txt.asc |

若出现上图所示内容,则说明文件传输过程中没有被修改过
GpG使用指南的更多相关文章
- GPG终极指南(加密/签名)
我们平时都听过非对称加密,公钥和私钥,签名验证,但这些证书都是怎么得到的呢?本篇文章会解答这些问题. 背景介绍 加密的一个简单但又实用的任务就是发送加密电子邮件.多年来,为电子邮件进行加密的标准一直是 ...
- GPG 使用指南
加密与签名 在传输信息时,会面临两个典型的问题: 如何保证发出的消息,只能被预期的接收人获取? 如何保证收到的消息,确实由预期的发送人发出? 这两个问题不难理解.例如发送的邮件可能会被监听,诈骗分子可 ...
- gpg 的使用
GPG入门教程 GpG使用指南 1. 安装 源码编译安装:源码下载地址 ./configure make make install 直接安装编译好的二进制文件 # Debian / Ubuntu 环境 ...
- docker在CentOS7下部署指南
docker只支持CentOS7.x系统,所以近期根据docker官网指南自己搭建了一套,供大家参考. 1.部署Centos7.x系统,查看系统版本. 2.执行 sudo yum update 更新到 ...
- 非对称加密与GPG/PGP
最近浏览博客的时候,经常会看到博主展示出自己的公钥,于是对 GPG/PGP 产生兴趣.下面简单记录相关文章的链接,方便以后了解. 简介: 1991年,程序员Phil Zimmermann为了避开政府的 ...
- RabbitMQ 入门指南——安装
RabbitMQ好文 Rabbitmq Java Client Api详解 tohxyblog-博客园-rabbitMQ教程系列 robertohuang-CSDN-rabbitMQ教程系列 Rabb ...
- Gitlab 社区版安装部署和维护指南
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.这篇文章是在 Gitlab 7.4 的环境下配置的,相关内容可能已经过时. 后续做了一次迁移,将 Gitlab 升级到了 ...
- docker日常使用指南
docker日常使用指南 目录 docker日常使用指南 前言 1.基础知识 1.1 docker是什么 1.2 与虚拟机(VM)的区别 1.3 镜像与容器 2.安装 2.1 在线安装 2.2 离线安 ...
- github新手使用指南
常用命令: Git 速查表(摘自 AI有道) 一.常见命令 git init : 初始化 git 仓库,即将一个文件夹初始化为一个 git 仓库.具体的操作是创建一个 .git 隐藏文件夹 git ...
随机推荐
- Spring Cloud 前后端分离后引起的跨域访问解决方案
背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...
- apply/call/bind的区别与用法
apply 方法/call 方法 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]); 两者作用一致,都是 ...
- Java设计模式之策略设计模式
1.什么是-策略设计模式 在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Ha ...
- HDU 1711 Number Sequence(字符串匹配)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- [前端] jquery验证手机号、身份证号、中文名称
验证: 中文姓名.手机号.身份证和地址 HTML(表单): <form action=""> <div class="form-group"& ...
- 在PowerShell脚本中集成Microsoft Graph
作者:陈希章 发表于2017年4月23日 我旗帜鲜明地表态,我很喜欢PowerShell,相比较于此前的Cmd Shell,它有一些重大的创新,例如基于.NET的类型系统,以及管道.模块的概念等等.那 ...
- 自学Zabbix3.5.2-监控项item-types监控类型
自学Zabbix3.5.2-监控项item-types监控类型 1. item types item types是由zabbix提供的各种类型的检查器,大致就是Zabbix agent, Simple ...
- 《C程序设计语言》【PDF】下载链接:
<C程序设计语言>[PDF]下载 https://u253469.pipipan.com/fs/253469-230382180 内容简介 在计算机发展的历史上,没有哪一种程序设计语言像C ...
- 【HTML5】增强的表单
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- JavaWeb 例子 JDBC+JSP登陆注册留言板
注册页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...