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

### GPG (GNU Privacy Guard) ###

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

### GPG 使用公钥和私钥 ###

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

### 在终端里使用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的[更多信息][1]以及如何使用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/) 荣誉推出

[1]:http://digital-era.net/gpa-gnu-privacy-assistant/
