GnuPG 是一个用来进行非对称加密(PGP)的免费软件,简称GPG(是不是有的童鞋已经被PGP和GPG给搞昏了? )。先说说什么是非对称加密。传统的加密手段往往是使用同一个密码进行加密和解密。例如你加密时用的密码是“abc”, 则解密时也要使用“abc”才行。这样就存在一个问题,你不能够把一段加密信息发送给你的朋友。试想,如果采用这种加密方式把信息发送给你的朋友时,你的 朋友必须要知道你的密码才能把你的信息解密出来。但你如何保证你的朋友是绝对可靠的呢?也就是说,如果你的朋友把你的密码告诉了别人,你的密码就不再安全 了。
非对称加密采用的是另一种思想。它会给你产生两个密钥,一个称为“公钥”,另一个称为“私钥”。公钥是可以公开的,你尽管把它传给别 人;私钥你一定要保管好不让其他任何人知道。当某人得到你的公钥后,他就可以给你发送加密信息了。具体来说,他把他要发给你的信息用你的公钥加密后发给 你,加密的信息只能用你的私钥去解密。这样,因为世界上除了你以外没有别人知道你的私钥,所以即使别人看到发送给你的加密信息他也无法解密,甚至连发送者 本人也不行。因为他不知道你的私钥。简单说来,就是用公钥去加密;用对应的私钥去解密。想给谁发送加密信息,首先要得到他的公钥。
支持非 对称加密的软件有多种,最著名的可能是美国的PGP了,不过它是个商业软件,价格不便宜。对于加密软件,我反对使用破解软件,因为如果信息需要加密的话, 肯定是非常重要的信息,破解软件无法保证加密的安全可靠。因此我建议使用免费开源的GnuPG软件进行信息的加密和解密。
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
请选择您要使用的密钥种类:
(1) DSA 和 ElGamal (默认)
(2) DSA (仅用于签名)
(5) RSA (仅用于签名)
您的选择? 1←只有1可以用于加密,其他种类只能用于签名
DSA 密钥对会有 1024 位。
ELG-E 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)←选择密码的位数,位数越大,越安全,但速度越慢
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n>= 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0←根据实际情况选择密钥期限
密钥永远不会过期
以上正确吗?(y/n)y←确认
您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合
成用户标识,如下所示:
“Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”
真实姓名:Hyphen Wang←请填入真实姓名,后面会用到
电子邮件地址:gpgencrypt@linuxfly.org←邮件作为标记之一,不能重复
注释:Use for GPG Encrypt←仅是注释而已
您选定了这个用户标识:
“Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O←输入“O”确认
您需要一个密码来保护您的私钥。←输入两次用于访问私钥的密码,紧记,不能公开或丢失
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
++++++++++...++++++++++..++++++++
随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵数!
(还需要274字节)←运行一些的程序,以便在内存中获得更多随机数
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
+++++++++++++++++++++++++.+++++.+++++.++++++++++.+++<+++++..+++++^^^
gpg: 密钥 A3942296 被标记为绝对信任←密钥ID
公钥和私钥已经生成并经签名。
gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:2 已签名:0 信任度:0-,0q,0n,0m,0f,2u
pub 1024D/A3942296 2008-12-19
密钥指纹 = E95E 1F77 6C4E 33BD 740C19AB EEF9 A67E A394 2296
uidHyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>
sub 2048g/911E677B 2008-12-19
gpg --output revoke.asc --gen-revoke mykeyID
gpg --keyserver Server Address --send-keys mykeyID
Server Address --send-keys
mykeyID
gpg -o keyfilename --export mykeyID
如果没有mykeyID则是备份所有的公钥,-o表示输出到文件keyfilename中,如果加上-a的参数则输出文本格式( ASCII )的信息,否则输出的是二进制格式信息。
gpg -o keyfilename --export-secret-keys mykeyID
如果没有mykeyID则是备份所有的私钥,-o表示输出到文件keyfilename中,如果加上-a的参数则输出文本格式的信息,否则输出的是二进制格式信息。
gpg --import filename
# gpg -e test
You did not specify a user ID. (you may use "-r")
Enter the user ID. End with an empty line: liyang
Added 1024g/C50E455A 2006-01-02 "liyang (hello) < liyang@sina.com>"
gpg -e -r liyang test (-r 表示指定用户)
还可以加上参数 -a 来输出ASCII编码的文件test.asc(test.gpg是二进制编码的,不可用文本读)
gpg -ea -r liyang test
# gpg -d test.gpg
You need a passphrase to unlock the secret key for
user: "liyang (hello) < liyang@sina.com>"
1024-bit ELG-E key, ID C50E455A, created 2006-01-02 (main key ID 378D11AF)
GnuPG提示用户,需要输入生成私钥使用的密码:
Enter passphrase:
gpg: encrypted with 1024-bit ELG-E key, ID C50E455A, created 2006-01-02
"liyang (hello) < liyang@sina.com>"
PS:无论加密解密,都可以加上-o参数来指定加密和解密后的输出文件,例如
#gpg -o doc.gpg -er name doc
其中name是选择谁的公钥加密,即谁是文件的接收者。
doc为要加密的文件,即原文件
doc.gpg为命令执行后生成的加密的文件,这里要先指定好文件名
1、数字签名
命令格式:
#gpg -o doc.sig -s doc
其中doc是原文件,doc.sig包含了原文件和签名,是二进制的。这个命令会要求你输入你的私钥的密码句。
#gpg -o doc.sig -ser name doc
既签名又加密
2、文本签名
#gpg -o doc.sig --clearsign doc
这样产生的doc.sig同样包含原文件和签名,其中签名是文本的,而原文件不变。
3、分离式签名
#gpg -o doc.sig -ab doc
doc.sig仅包括签名,分离式签名的意思是原文件和签名是分开的。
b 表示分离式签名detach-sign
4、验证签名
#gpg --verify doc.sig [doc]
验证之前必须导入文件作者的公钥,对于分离式签名,最后还要加上原文件,即后面的doc。
$ gpg --fingerprint mike@hairnet.orgpub 1024D/4F03BD39 2001-01-15 Mike Socks (I'm WIRED) Key fingerprint = B121 5431 8DE4 E3A8 4AA7 737D 20BE 0DB8 4F03 BD39sub 1024g/FDBB477D 2001-01-15$
$ gpg --sign-key mike@hairnet.orgpub 1024D/4F03BD39 created: 2001-01-15 expires: neversub 1024g/FDBB477D created: 2001-01-15 expires: never(1) Mike Socks (I'm WIRED) pub 1024D/4F03BD39 created: 2001-01-15 expires: neverFingerprint = B121 5431 8DE4 E3A8 4AA7 737D 20BE 0DB8 4F03 BD39Mike Socks (I'm WIRED) Are you really sure that you want to sign this keywith your key: Ima User (I'm just ME) Really sign? yYou need a passphrase to unlock the secret key foruser: Ima User (I'm just ME) 1024-bit DSA key, ID D9BAC463, created 2001-01-03Enter passphrase:$
gpg --check-sigs mike@hairnet.org
$ gpg --edit-key mike@hairnet.orgpub 1024D/4F03BD39 created: 2001-01-15 expires: never trust: -/fsub 1024g/FDBB477D created: 2001-01-15 expires: never(1) Mike Socks (I'm WIRED) Command> trust 1 = Don't know 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully s = please show me more information m = back to the main menuYour decision? 2Command> quit$
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
sec1024D/A3942296 2008-12-19 Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>
要从钥匙环里删除这把密钥吗?(y/N)y
这是一把私钥!――真的要删除吗?(y/N)y
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
sec1024D/A3942296 2008-12-19 Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>
要从钥匙环里删除这把密钥吗?(y/N)y
gpg -o doc.gpg -c doc
签字、检查、加密或解密
默认的操作依输入数据而定
-s, --sign [文件名] 生成一份签字
--clearsign [文件名] 生成一份明文签字
-b, --detach-sign 生成一份分离的签字
-e, --encrypt 加密数据
-c, --symmetric 仅使用对称加密
-d, --decrypt 解密数据(默认)
--verify 验证签字
--list-keys 列出密钥
--list-sigs 列出密钥和签字
--check-sigs 列出并检查密钥签字
--fingerprint 列出密钥和指纹
-K, --list-secret-keys 列出私钥
--gen-key 生成一副新的密钥对
--delete-keys 从公钥钥匙环里删除密钥
--delete-secret-keys 从私钥钥匙环里删除密钥
--sign-key 为某把密钥添加签字
--lsign-key 为某把密钥添加本地签字
--edit-key 编辑某把密钥或为其添加签字
--gen-revoke 生成一份吊销证书
--export 导出密钥
--send-keys 把密钥导出到某个公钥服务器上
--recv-keys 从公钥服务器上导入密钥
--search-keys 在公钥服务器上搜寻密钥
--refresh-keys 从公钥服务器更新所有的本地密钥
--import 导入/合并密钥
--card-status 打印卡状态
--card-edit 更改卡上的数据
--change-pin 更改卡的 PIN
--update-trustdb 更新信任度数据库
--print-md 算法 [文件] 使用指定的散列算法打印报文散列值
选项:
-a, --armor 输出经 ASCII 封装
-r, --recipient 某甲 为收件者“某甲”加密
-u, --local-user 使用这个用户标识来签字或解密
-z N 设定压缩等级为 N (0 表示不压缩)
--textmode 使用标准的文本模式
-o, --output 指定输出文件
-v, --verbose 详细模式
-n, --dry-run 不做任何改变
-i, --interactive 覆盖前先询问
--openpgp 行为严格遵循 OpenPGP 定义
--pgp2 生成与 PGP 2.x 兼容的报文