GPG(pgp)加解密中⽂完整教程⼀、介绍
1.⽣成密钥对要使⽤GnuPG加密,⾸先需要创建密钥对,执⾏:
# gpg --gen-key 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 ←请填⼊真实姓名,后⾯会⽤到电⼦邮件地址:
←邮件作为标记之⼀,不能重复注释:Use for GPG Encrypt ←仅是
注释⽽已您选定了这个⽤户标识: “Hyphen Wang (Use for GPG Encrypt)
<>”
更改姓名(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 740C 19AB EEF9 A67E A394 2296
uid Hyphen Wang (Use for GPG Encrypt) <> sub
2048g/911E677B 2008-12-19
2.密钥的回收
当您的密钥对⽣成之后,您应该⽴即做⼀个公钥回收证书,如果您忘记了您的私钥的⼝令或者您的私
钥丢失或者被盗窃,您可以发布这个证书来声明以前的公钥不再有效。⽣成回收证书的选项是"--gen-revoke"。
gpg --output revoke.asc --gen-revoke mykeyID
其中mykey 参数是可以表⽰的密钥标识,产⽣的回收证书放在revoke.asc⽂件⾥,⼀旦回收证书被发放,以前的证书就不能再被其他⽤户访问,因此以前的公钥也就失效了。
PS:如果⼀旦决定撤销已经上传的公钥,就需要将该密钥的回收证书上传⾄密钥服务器完成回收⼯作。
gpg --keyserver Server Address --send-keys mykeyID
3.密钥的上传
当上述⼯作完成以后,为了让尽可能多的⼈获取您的公钥,您可以将公钥邮寄出去,或者贴在⾃⼰的个⼈主页上,当然还有⼀种更好的⽅法就是上传到全球性的密钥服务器,其他⽤户可以通过您提供的公钥ID来搜索并获得您的公钥。
通过如下命令可以将你的key发布到服务器上:
gpg --keyserver Server Address --send-keys mykeyID
特糕点PS:当然您也可以定义默认的服务器key server,⼀般安装好后的默认key server都是subkeys.pgp。你也可以通过修改.f中的keyserver信息来改变你的key server。
4.密钥的导出/导⼊
我们通常需要导出公钥和私钥保存起来,当然公钥是可以满世界的泼洒,但是私钥请务必保存好,否则你的密钥对将会永久性的失去威⼒。
公钥的导出:
gpg -o keyfilename --export mykeyID
如果没有mykeyID则是备份所有的公钥,-o表⽰输出到⽂件keyfilename中,如果加上-a的参数则
输出⽂本格式( ASCII )的信息,否则输出的是⼆进制格式信息。
私钥的导出:
gpg -o keyfilename --export-secret-keys mykeyID
如果没有mykeyID则是备份所有的私钥,-o表⽰输出到⽂件keyfilename中,如果加上-a的参数则
输出⽂本格式的信息,否则输出的是⼆进制格式信息。
密钥的导⼊:
gpg --import filename
PS:⽤户可以使⽤gpg --list-keys命令查看是否成功导⼊了密钥。
5.加密解密和数字签名
通过上述的密钥⽣成以及公钥分发后,加密和解密数据变得⾮常容易,⽤户可以通过使⽤该功能来达到安全地在⽹络上传输⾃⼰的隐密数据的⽬的。
如果⽤户patterson要给⽤户liyang发送⼀个加密⽂件,则他可以使⽤liyang的公钥加密这个⽂件,并且这个⽂件也只有liyang使⽤⾃⼰的密钥才可以解密查看。下⾯给出加解密的步骤:
⽤户patterson使⽤liyang的公钥加密⽂件test,使⽤下⾯的指令:
# 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>"
这样,就可以将f⽂件加密成test.gpg,⼀般⽤户是⽆法阅读的
PS:当然你也可以直接指定使⽤哪个⽤户的公钥进⾏加密:
gpg -e -r liyang test (-r 表⽰指定⽤户)
还可以加上参数 -a 来输出ASCII编码的⽂件test.asc(test.gpg是⼆进制编码的,不可⽤⽂本读)
gpg -ea -r liyang test
⽤户liyang 使⽤⾃⼰的私钥来解密该⽂件,如下所⽰:
# gpg -d test.gpg
You need a passphrase to unlock the secret key for
user: "liyang (hello) < liyang@sina>"
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>"
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中引⼊了⼀个复杂的信任系统,以帮助我们区分哪些密匙是真的,哪些密匙是假的。这个信任系统是基于密匙的,主要包括密匙签名。
当收到熟⼈的公匙并且GPG告知不存在任何实体可信信息附加于这个公匙后,⾸要的事情就是对这个密匙进⾏“指纹采样”(fingerprint)。例如,我们对来⾃mike的公匙进⾏了导⼊操作,并且GPG告知我们不存在这个密匙的附加可信信息,这时候,我们⾸先要做的⼯作就是对这个新密匙进⾏“指纹采样 ”,相关命令及执⾏情况如下:
# gpg --delete-keys hyphenwang@redflag-linux 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.
sec 1024D/A3942296 2008-12-19 Hyphen Wang (Use for GPG Encrypt)
<>
要从钥匙环⾥删除这把密钥吗?(y/N)y
三.对称加密:
当然GPG同样具备普通的对称加密功能,这时候就不需要密钥,直接⽤密码加密即可(注意,这⾥的密码不⼀定是你私钥的密码,您⼤可以随意设定)gpg -o doc.gpg -c doc
---------------------------------------------
四.GPG常⽤参数:
语法:gpg [选项] [⽂件名] 签字、检查、加密或解密默认的操作依输⼊数据⽽定
指令:
-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 兼容的报⽂
(请参考在线说明以获得所有命令和选项的完整清单)
范例:
-se -r Bob [⽂件名] 为 Bob 这个收件⼈签字及加密 --clearsign [⽂件名] 做出明⽂签字 --detach-sign [⽂件名] 做出分离式签字 --list-keys [某甲] 显⽰密钥 --fingerprint [某甲] 显⽰指纹
-----------------------------------------------------------------------------------
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论