---
author: ''
category: 技术
comments_data:
- date: '2014-05-12 11:40:45'
  message: '学习//@Garfield550: 转发微博'
  postip: 106.120.101.58
  username: 微博评论
count:
  commentnum: 1
  favtimes: 3
  likes: 0
  sharetimes: 2
  viewnum: 13175
date: '2014-05-12 10:04:26'
editorchoice: false
excerpt: 加密技术可以保证你的文件使用加密形式存储，不管你是要把它公开到因特网，备份到服务器，用U盘携带，还是保存在笔记本里。加密你的数据，意味着除非是你认可的接收者，其他人都不可以读取，这样可以防止信息泄漏。
  GPG (GNU Privacy Guard)  GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式，使用了一对密钥对消息进行加密和解密，来保证消息的安全传输。一开始，用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户，需要先从证书机构的公共目录获取接收者的公钥，然后用公钥加密信息，再发
fromurl: ''
id: 3007
islctt: true
largepic: /images/p/201405/12/100248l0q5dr0iq0ggri20.jpeg
permalink: /article-3007-1.html
pic: /images/p/201405/12/100248l0q5dr0iq0ggri20.jpeg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: 加密技术可以保证你的文件使用加密形式存储，不管你是要把它公开到因特网，备份到服务器，用U盘携带，还是保存在笔记本里。加密你的数据，意味着除非是你认可的接收者，其他人都不可以读取，这样可以防止信息泄漏。
  GPG (GNU Privacy Guard)  GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式，使用了一对密钥对消息进行加密和解密，来保证消息的安全传输。一开始，用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户，需要先从证书机构的公共目录获取接收者的公钥，然后用公钥加密信息，再发
tags:
-  GPG
thumb: false
title: GNU Privacy Guard加密指南
titlepic: false
translator: zpl1025
updated: '2014-05-12 10:04:26'
---

加密技术可以保证你的文件使用加密形式存储，不管你是要把它公开到因特网，备份到服务器，用U盘携带，还是保存在笔记本里。加密你的数据，意味着除非是你认可的接收者，其他人都不可以读取，这样可以防止信息泄漏。


### GPG (GNU Privacy Guard)


![](/images/p/201405/12/100248l0q5dr0iq0ggri20.jpeg)


GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式，使用了一对密钥对消息进行加密和解密，来保证消息的安全传输。一开始，用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户，需要先从证书机构的公共目录获取接收者的公钥，然后用公钥加密信息，再发送给接收者。当接收者收到加密消息后，他可以用自己的私钥来解密，而私钥是不应该被其他人拿到的。


### GPG 使用公钥和私钥


公钥是你共享出来的一个公开密钥，它可以被发给任何你希望收到加密信息的人，他们可以使用你的公钥来加密信息。公钥本身不能用来解密自己加密过的信息，只有你自己——那个拥有对应私钥的人——能够解密。私钥是你自己的私人密码，可以用来解密用你的公钥加密过的信息。如果你把私钥泄漏给别人，那么他将可以解密并查看那些使用你的公钥加密过的信息。


![](/images/p/201405/12/100429lrq288jq1qjk2200.gif)


### 在终端里使用GPG


如今大多数的Linux发行版都默认包含了GPG。想检查一下的话，打开终端并输入：



```
$ gpg --version 

```

然后你应该看到版本。如果是这样的话，你不需要做其他事情了。否则，你需要从你的发行版软件仓库里安装GPG。


### 生成密钥


想使用GPG来加密你的通讯，你需要先创建一对密码。首先，打开终端并运行下面的命令：



```
$ gpg --gen-key 

```

然后会有如下提示：



```
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? 

```

这里要选择数字1，因为它可以用来加密和解密，第二和第三个选项只能让你给信息签名。按下数字1，然后按回车。


然后会有如下提示：



```
1 DSA key-pair will have 1024 bits.
2 ELG-E keys may be between 1024 and 4096 bits long.
3 What key-size do you want? (2048) 

```

这里最好输入“2048”，就像GPG推荐的那样。如果你不希望你的密钥过期的话（在后面的提示里，选择0）。如果有提示说信息是否正确的话，回答Yes，然后输入你的真实名字，email地址，以及一个说明（可选的）。如果一切顺利，按下“哦”（对应着OK）然后回车。


在这之后，会提示你输入一个密码，密码会要求重复输入一次。通常，请使用一个难于破解的加强密码，而不推荐用名字/地址/生日/单词等等来做密码。


在输好密码之后，请按照终端里的提示信息做：我们需要生成大量的随机数，建议您在生成素数的过程中做一下这些动作（敲击键盘，移动鼠标，读写硬盘），这样会让随机数生成器有机会获取更大的熵。


生成好密钥以后，你应该会看到一条类似的提示信息：gpg: key 083C39A4 marked as ultimately trusted. public and secret key created and signed.


### 密钥服务器


密钥服务器是用来发布你的公钥，并将其分发到其他人的服务器，这样其他用户可以轻松的根据你数据库中的名字（或者e-mail地址）来获取你的公钥，并给你发送加密信息。这样可以避免把公钥直接拷贝给你的朋友的方式，而让其他人直接通过在线数据库来找到你。


上传你的公钥到密钥服务器：



```
$ gpg --send-keys --keyserver [keyservers.address.com] [yourpublicid] 

```

你需要把keyservers.address.com替换成你选择的服务器（或者用mit.edu，它会跟其他服务器做同步），还需要把命令行中的*yourpublicid*替换成你的。最终执行的命令看上去会大概是下面这样子：



```
$ gpg --send-keys --keyserver hkp://pgp.mit.edu 083C39A4 

```

### 加密文件


如果你想给你的朋友发送一个用他的公钥加密过的文件，可以用下面的命令：



```
$ gpg -o encrypted_file.gpg --encrypt -r key-id original.file 

```

命令解释：



```
-o encrypted_file.gpg = 指定输出文件
--encrypt = 做加密
-r = 接收者的KEY-ID，比如这里就填你朋友的KEY-ID。
original.file = 指定要加密的文件

```

### 解密文件


如果有人给你发送了一个用你的公钥加密过的文件，你可以按下面的方式解密：



```
$ gpg --decrypt filename.gpg 

```

### 对称加密


你还可以使用GPG做对称加密，来给文件加上一个密码。这种不同于公钥加密的方式，在对称加密中，同一个密钥用于加密和解密。这种方式在处理信息的时候会简单点，但是保密性没那么好，因为需要把密码告诉接收者。下面是用密码加密文件的命令：



```
$ gpg -c filename.txt 

```

解密这个文件，用下面的命令：



```
$ gpg filename.txt 

```

然后，会提示你输入密码，之后就开始解密文件。


### 文档数字签名


数字签名非常类似于你在信件或者重要文件的末尾签上自己的名字，它表示这份文件确实是由你发出来的。通过数字签名，它会计算整个文件内容的SHA1哈希值，然后把这个值附加到签名末尾。如果文件内容被篡改，签名的校验就会失败，可以用来鉴定伪造。如果用户自己在签名后编辑了这份文件，签名校验也会失败，因为此时文件的SHA1哈希值已经和之前签名时不同了。


对一份文件做数字签名，运行下面的命令：



```
$ gpg --clearsign filename.txt 

```

### 生成销毁密钥


销毁密钥可以在你的私钥泄漏或者怀疑泄漏的时候，吊销你的公钥。使用下面的命令创建一个销毁密钥：



```
$ gpg --output revoke.asc --gen-revoke keyid 

```

把销毁密钥保存到一个安全的地方，任何人都可以用它让你的密钥失效。（你可以用对称加密方式来加密你的销毁密钥文件。）


### 在终端里使用GPG的一些技巧


通过下面的命令可以查看你已经导入的GPG密钥：



```
$ gpg --list-keys 

```

之后应该会列出来用你e-mail注册的密钥列表（因为这里只有一个密钥，它只列出了你自己的密钥），然后，你可以看到自己的KEY-ID，就可以通过上文介绍的命令提交给密钥服务器。


显示你的密钥链中的私钥和公钥。



```
$ gpg --list-public-keys # 会列出来公钥
$ gpg --list-secret-keys # 会列出来私钥

```

### 导入密钥



```
$ gpg --import KEYFILE 

```

命令中的KEYFILE应该是需要导入的公钥文件名。（如果文件不在主目录中，使用cd命令切换到该文件的目录下，再执行上面的命令）


### 导出公钥到文件


用下面的命令可以将你的公钥导出为ASCII格式：



```
$ gpg --export -a > publickey.asc 

```

\* \* \* \* \*


### 关于Richard White


Richard是一位技术爱好者，在不止一个场合他被称为极客。他还是三本书的作者，最近的一本《数字时代的隐私》即将在2014年5月份出版精装本。他还是数字时代网站的主编和驱动者，数字时代的目的是提供资源和工具来实现和维护匿名，安全和隐私。Ricard经常写一些和隐私相关的文章，最近忙着写《CLI艺术》，收集开源的命令行软件。关于GNU Privacy Guard的[更多信息](http://digital-era.net/gpa-gnu-privacy-assistant/)以及如何使用GPG软件的图形界面工具，你可以访问White的数字时代网站。




---


via: <http://distrowatch.com/weekly.php?issue=20140407>


译者：[zpl1025](https://github.com/zpl1025) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出