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 离线安 ...
-
JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
随机推荐
-
Java虚拟机4:内存溢出
堆溢出 Java堆唯一的作用就是存储对象实例,只要保证不断创建对象并且对象不被回收,那么对象数量达到最大堆容量限制后就会产生内存溢出异常了.所以测试的时候把堆的大小固定住并且让堆不可扩展即可.测试代码 ...
-
密码学初级教程(一)基本概念及DES加密算法
密码技术在网络通信中广泛使用,本节是初步接触密码学技术的笔记. 第1章 加密-解密 破译 明文-密文 密钥 密码算法 对称密码-公钥密码(非对称密码) 单向散列函数-散列值 消息认证码 数字签名 伪随 ...
-
Linux的Cgroup
为什么要有cgroup Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源.也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等.于是就 ...
-
[eclipse]“Syntax error, insert ";}"; to complete”报错的解决方案
背景:本人在网上学习java时,看到一段样例代码比较好,因此复制粘贴到eclipse中看看编译结果.结果eclipse报"Syntax error, insert "}" ...
-
(原创)Python字符串系列(1)——str对象
在本博客 <Python字符串系列> 中,将介绍以下内容: Python内置的str对象及操作 字符串的格式化 Python中的正则表达式 re模块 本文将介绍Python内置的 str ...
-
Rails学习:create操作 局部模板
学习Ruby on Rails实战真经 里面说rails4使用了strong parameters, 所以代码这么写:注意不是Event.new(params[:event])了,而是参数是函数返回值 ...
-
canvas 模拟小球上抛运动的物理效果
最近一直想用学的canvas做一个漂亮的小应用,但是,发现事情并不是想的那么简单.比如,游戏的逼真效果,需要自己来coding…… 所以,自己又先做了一个小demo,算是体验一下亲手打造物理引擎的感觉 ...
-
XHTML代码规则&;手工html转换xhtml
XHTML规则 XHTML是XML得一个应用,它遵守XML得规范和要求.从技术角度上讲.这些语法规则是由XML规范定义的. XML文档必须遵守的规则使得生成工具以解析文档变得更容易.这些规则也使得XM ...
-
HTTPS与SSL
---------------------------------------------------------------------------------------------------- ...
-
每周分享一 之 webSocket
一:什么是webSocket ? webSocket是HTML5出的新协议,WebSocket协议支持,在受控环境中运行不受信任代码的客户端与选择了该代码通信的远程主机之间进行双向通信. 简单翻译一下 ...