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使用指南的更多相关文章

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

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

  2. GPG 使用指南

    加密与签名 在传输信息时,会面临两个典型的问题: 如何保证发出的消息,只能被预期的接收人获取? 如何保证收到的消息,确实由预期的发送人发出? 这两个问题不难理解.例如发送的邮件可能会被监听,诈骗分子可 ...

  3. gpg 的使用

    GPG入门教程 GpG使用指南 1. 安装 源码编译安装:源码下载地址 ./configure make make install 直接安装编译好的二进制文件 # Debian / Ubuntu 环境 ...

  4. docker在CentOS7下部署指南

    docker只支持CentOS7.x系统,所以近期根据docker官网指南自己搭建了一套,供大家参考. 1.部署Centos7.x系统,查看系统版本. 2.执行 sudo yum update 更新到 ...

  5. 非对称加密与GPG/PGP

    最近浏览博客的时候,经常会看到博主展示出自己的公钥,于是对 GPG/PGP 产生兴趣.下面简单记录相关文章的链接,方便以后了解. 简介: 1991年,程序员Phil Zimmermann为了避开政府的 ...

  6. RabbitMQ 入门指南——安装

    RabbitMQ好文 Rabbitmq Java Client Api详解 tohxyblog-博客园-rabbitMQ教程系列 robertohuang-CSDN-rabbitMQ教程系列 Rabb ...

  7. Gitlab 社区版安装部署和维护指南

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.这篇文章是在 Gitlab 7.4 的环境下配置的,相关内容可能已经过时. 后续做了一次迁移,将 Gitlab 升级到了 ...

  8. docker日常使用指南

    docker日常使用指南 目录 docker日常使用指南 前言 1.基础知识 1.1 docker是什么 1.2 与虚拟机(VM)的区别 1.3 镜像与容器 2.安装 2.1 在线安装 2.2 离线安 ...

  9. github新手使用指南

    常用命令:   Git 速查表(摘自 AI有道) 一.常见命令 git init : 初始化 git 仓库,即将一个文件夹初始化为一个 git 仓库.具体的操作是创建一个 .git 隐藏文件夹 git ...

随机推荐

  1. 深度解剖sesssion运行原理

    已经大半年没有更新博客了,一方面有比博客更重要的事情要做,另外一方面也没有时间来整理知识,所以希望在接下来的日子里面能够多多的写博客来与大家交流 什么是session session的官方定义是:Se ...

  2. Python的列表

    1. Python的列表简介 1. 1 列表的定义 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 ,即它的 ...

  3. Linux中MySQL配置文件my.cnf参数优化

    MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的.MySQL的参数优化也不例外,对于不同的需求,还有硬件的配置,优化不可能又最优选择,只能慢慢的 ...

  4. SALM入门笔记(1):特征点的匹配

    SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...

  5. 单点登录(SSO)的设计

    一.前言 什么是SSO? SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.https://baike.baidu.c ...

  6. Linux上跑两个版本的php,5.4.45和5.3.24

    首先,装的实在艰难,所以容我吐槽两句: PHP好个P,两个小版本都不兼容,把这个php5.3.24放在5.4.45环境下都跑不了.对于我这种用多了向下兼容的java的人来说,简直无法想象! 网上有装俩 ...

  7. codevs1050

    题目地址:http://codevs.cn/problem/1050/ 分析: 最開始想直接用状压做,发现怎么都想不出来.就和当年的多行多米诺骨牌(这道题至少最后还是把普通状压做法看懂了). 直到听到 ...

  8. Javascript自动化文档工具JSDuck在Windows下的使用心得

    作者: zyl910 一.工具比较 为了让前端JavaScript程序更具可维护性,更利于团队开发,文档非常重要.此时便需要使用自动化文档工具了. 我对比了各种JavaScript自动化文档工具,发现 ...

  9. 你懂AI吗(1)

    那场载入史册的战争之后,AI成为地球的主人已经快一个世纪了. 随着见证这场战争的那一代人基本消失,除了几个要堵上人类的尊严,颠覆AI的邪恶统治的组织外,现在的人基本已经习惯了这个AI统治的世界. AI ...

  10. class的二般用法

    一般来说,class就是给一堆元素添加样式的,但是还有二般的用法,就是用来作为一个开关,来切换他的子孙元素的样式.举个例子: <ul> <li><span>1< ...