pgp加密解密,gpg加密文件
众所周知,互联网是不安全的,但是在上面使用的大部分应用,比如Web、Email,一般只提供明文传输(https、smtps除外)。因此,当我们需要传输重要文件时,我们应该对其中的信息进行加密。非对称加密是常用的加密方法之一。但是基于PGP加密的中文介绍很少,于是我萌生了写一个完整教程的想法。当然,本文部分资料是通过搜索网络整理的,不能保证100%原创。
GnuPG是非对称加密(PGP)的免费软件,简称GPG。(有没有一些童鞋被PGP和GPG搞糊涂了?)。先说非对称加密。传统的加密方法通常使用相同的密码进行加密和解密。比如加密时用的密码是“abc”,解密时也要用“abc”。有一个问题是你不能给你的朋友发送加密信息。试想一下,如果你用这种加密方式给你的朋友发送信息,你的朋友一定知道你的密码才能解密你的信息。但是你怎么能保证你的朋友绝对可靠呢?也就是说,如果你的朋友把你的密码告诉别人,你的密码就不再安全了。
非对称加密采用了另一种思想。它会给你两把钥匙,一把叫“公钥”,一把叫“私钥”。公钥是可以公开的,所以你可以把它传给别人。你必须保证私钥的安全,不让任何人知道。当有人得到你的公钥时,他可以给你发送加密信息。具体来说,他用你的公钥加密他想发给你的消息,发给你。加密的邮件只能用您的私钥解密。这样,由于世界上除了你之外,没有其他人知道你的私钥,所以即使别人看到了发送给你的加密信息,他也无法解密,就连发送者自己也无法解密。因为他不知道你的私钥。简单来说,就是用公钥加密;使用相应的私钥解密。你要向谁发送加密信息,你必须先得到他的公钥。
支持非对称加密的软件有很多种,最著名的大概是美国的PGP,但它是商业软件,价格也不便宜。至于加密软件,我反对使用破解软件,因为如果信息需要加密,那一定是非常重要的信息,破解软件无法保证加密的安全性和可靠性。所以我建议使用免费开源的GnuPG软件来加密和解密信息。
# gpg - gen-key
gpg(GnuPG)1 . 4 . 5;版权所有(C) 2006自由软件基金会。
这个程序绝对没有担保。
这是自由软件,欢迎您重新发布
在特定条件下。详见文件复制。
请选择您想使用的密钥类型:
(1) DSA和ElGamal(默认)
(2) DSA(仅用于签名)
(5) RSA(仅用于签名)
你的选择?1只有1可以用于加密,其他种类只能用于签名。
DSA密钥对将有1024位。
ELG-E密钥的长度应该在1024位到4096位之间。
您想使用多大的密钥?(2048)选择您的密码位数。位数越大越安全,但速度越慢。
所需的密钥大小为2048位。
请设置此密钥的有效期。
0=密钥永不过期。
N=密钥将在n天后过期。
W=周后密钥过期。
M=个月后密钥过期。
Y=密钥在n年后过期。
密钥的有效期是多长?(0) 0根据实际情况选择关键术语。
密钥永不过期。
以上正确吗?(是/否)y确认
您需要一个用户ID来标识您的密钥;该软件将使用真实姓名,评论和电子邮件地址的组合。
进入用户身份,如下所示:
"海因里希海涅(Der Dichter)Heinrich @ Dusseldorf . de "
真实姓名:连字符王请填写真实姓名,稍后使用。
电子邮件地址:gpgencrypt@linuxfly.org电子邮件是标志之一,不可复制。
评论:用于GPG加密只是一个评论。
您已经选择了此用户ID:
"连字符王(用于加密)"
改名字(n)、评论(c)、邮箱(e)还是确认(O)/退出(q)?O输入“O”确认
您需要一个密码来保护您的私钥。输入两次用于访问私钥的密码,记住,不能公开,也不能丢失。
我们需要生成大量的随机字节。这时,你可以做更多的杂务(如敲击键盘、移动
鼠标、读写硬盘等。),这样会让随机数生成器有更好的机会获得足够的熵。
.
没有足够的随机字节。请做一些其他琐碎的事情,让操作系统收集更多的熵数!
(需要274字节)运行一些程序,在内存中获取更多的随机数。
我们需要生成大量的随机字节。这时,你可以做更多的杂务(如敲击键盘、移动
鼠标、读写硬盘等。),这样会让随机数生成器有更好的机会获得足够的熵。^^^
Gp:密钥A3942296被标记为绝对信任/密钥ID。
公钥和私钥已经生成并签名。
Gpg:检查信任数据库。
Gpg:需要3个勉强信托和1个完全信托,PGP信托模型
Gp:深度:0有效性:2已签名:0信任:0-,0q,0n,0m,0f,2u
2008年12月19日
指纹=e 95 E1 f 77 6 C4 e 33 BD 740 c 19 ab eef 9a 67 a 394 2296
王(用于加密)
sub 2048g/911E677B
生成密钥对后,您应该立即制作公钥恢复证书。如果您忘记了您的私钥的密码,或者您的私钥丢失或被盗,您可以发出此证书来声明以前的公钥不再有效。回收证书的选项是- gen-revoke 。
mykey参数是可以表示的密钥标识符,生成的回收证书放在revoke.asc文件中。一旦颁发了回收证书,其他用户就不能再访问以前的证书,因此以前的公钥无效。
PS:如果决定撤销上传的公钥,需要上传该密钥的恢复证书到密钥服务器完成恢复。
3.上传密钥
当上述工作完成后,为了让尽可能多的人得到你的公钥,你可以把它邮寄出去,或者发布在你的个人主页上。当然更好的方法是上传到全局密钥服务器,其他用户可以通过你提供的公钥ID搜索得到你的公钥。
您可以通过以下命令将您的密钥发布到服务器:
PS:当然也可以定义默认的密钥服务器。通常,安装后默认的密钥服务器是subkeys.pgp.net。您还可以通过修改gnupg/gpg.conf中的密钥服务器信息来更改您的密钥服务器
通常,我们需要导出公钥和私钥并保存它们。当然,公钥可以洒得到处都是,但私钥一定要保存,否则你的密钥对就永久失效了。
gpg -o keyfilename - export mykeyID
如果没有mykeyID,则备份所有公钥。-o表示输出到文件keyfilename。如果添加了参数-a,则输出文本格式(ASCII)的信息,否则,输出二进制格式的信息。
gpg-o key filename-export-secret-keys mykeyID
如果没有mykeyID,将备份所有私钥。-o表示输出到文件keyfilename。如果添加了参数-a,将输出文本格式的信息。否则,将以二进制格式输出信息。
PS:用户可以使用gpg - list-keys命令来检查密钥是否被成功导入。
5.加密、解密和数字签名
经过上述的密钥生成和公钥分发后,加密和解密数据就变得非常容易,用户可以利用该功能在网络上安全地传输自己的秘密数据。
如果用户patterson想发送一个加密的文件给用户liyang,他可以用liyang的公钥加密该文件,而该文件只能由liyang用自己的密钥解密和查看。下面给出加密和解密的步骤:
用户patterson使用liyang的公钥加密文件test,使用以下指令:
您没有指定用户id。(您可以使用-r )
输入用户ID。以空行结尾:李阳
增加1024g/C50E455A 2006-01-02“溧阳(你好)liyang@sina.com”
这样就可以将gpg.conf文件加密成test.gpg,普通用户无法读取。
PS:当然也可以直接指定使用哪个用户的公钥进行加密:
Gp-e-r liyangtest (-r表示指定的用户)
还可以添加参数-a来输出ASCII编码的文件test.asc(test.gpg是二进制编码的,不能通过文本读取)。
gpg -ea -r李阳试验
您需要一个密码来解锁的密钥
用户:“李阳(你好)liyang@sina.com”
1024位ELG-E密钥,ID C50E455A,创建于2006年1月2日(主密钥ID 378D11AF)
GnuPG提示用户输入用于生成私钥的密码:
输入密码:
gpg:使用1024位ELG-E密钥加密,ID为C50E455A,创建于2006年1月2日
李阳(你好)liyang@sina.com
PS:不管是加密还是解密,都可以添加-o参数来指定加密和解密的输出文件,例如
#gpg -o文档. gpg -er名称文档
其中,name表示选择了谁的公钥加密,即谁是文件的接收者。
Doc是要加密的文件,也就是原始文件。
Doc.gpg是命令执行后生成的加密文件。这里,应该首先指定文件名。
1.数字签名
命令格式:
#gpg -o文档. sig -s文档
Doc是原始文件,doc.sig包含原始文件和签名,是二进制的。该命令将要求您输入您的私钥密码。
#gpg -o doc.sig -ser name doc
签名和加密
2.文本签名
# gpg-o doc . SIG-clear SIG doc
生成的doc.sig还包含原始文件和签名,其中签名是文本,而原始文件不变。
3.单独签名
#gpg -o文档. sig -ab文档
Doc.sig只包含签名。分割签名意味着原始文档和签名是分开的。
b表示分离签名,一个单独的签名。
4.验证签名
#gpg - verify doc.sig [doc]
在验证之前,必须导入文件作者的公钥。对于分割签名,必须在末尾添加原始文件,即下面的doc。
虽然在理论上,用公钥和私钥可以实现安全的信息通信,但在实际中,公钥必须得到有效的确认。因为确实存在伪造公钥信息的可能。
因此,一个复杂的信任系统被引入GPG,以帮助我们区分哪些密钥是真的,哪些是假的。这个信任体系是基于密钥的,主要包括密钥签名。
当收到一个熟人的公钥,而GPG告诉我们这个公钥没有附加实体可信信息时,第一件事就是“指纹化”这个密钥。例如,我们从迈克那里导入公钥,GPG告诉我们,关于这个密钥没有额外的可信信息。这时,我们首先要做的就是对这把新钥匙进行“指纹采样”。相关命令和实现如下:
$ gpg-fingerprint Mike @ hairnet . org pub 1024d/4f 03 BD 39 2001-01-15 Mike Socks(我是有线的)Key fingerprint=B121 5431 8de 4 e3a 8 4a a7 737d 20 be 0 db 8 4f 03 BD 39 sub 1024g/fdbb 477d 2001-01-15 $。
这样它的指纹信息是从关键数据中生成的,应该是唯一的。然后,我们打电话给迈克确认两件事。首先,他是否给我们送来了钥匙;其次,他的公钥指纹信息是什么。如果迈克确认了这两件事,我们就可以确定这把钥匙是合法的。接下来,我们对密钥进行签名,以表明该密钥来自Mike,并且我们信任该密钥。相关命令和执行如下:
$ gpg-sign-key Mike @ hairnet . org pub 1024d/4 f 03 BD 39创建时间:2001-01-15到期时间:neversub 1024g/FDBB477D创建时间:2001-01-15到期时间:never(1)Mike Socks(I m WIRED)pub 1024d/4 f 03 BD 39创建时间:2001-01-15到期时间:never fingerprint=B121 5431 8de 4 e3a 8 4a 7 737d 27d您需要一个密码来解锁用户的密钥:Ima用户(我就是我)1024位DSA密钥,ID D9BAC463,创建于2001-01-03输入密码:$
到目前为止,Mike的公钥是用我们的私钥签名的,任何持有我们公钥的人都可以验证签名确实属于我们。附加在Mike的公钥上的签名信息将随其在互联网上传播。我们用个人信誉,也就是我们自己的私钥,来保证这个密钥真的属于迈克。这是一个多么感人而又诚实的故事。现实世界中的人们是否应该反思这种严格的技术标准?
或者回到这里。获取附加到公钥的签名信息列表的命令是:
gpg -检查-mike@hairnet.org
签名列表越长,密钥的可信度越高。实际上,提供密钥验证功能的是签名系统本身。假设我们收到一个由Mike签名的密钥,通过Mike的公钥,我们验证签名确实属于Mike,那么我们信任这个密钥。推而广之,我们可以信任任何由Mike签名的密钥。
为了更加安全,GPG还引入了另一个附加功能:信任级别。有了它,我们可以为我们拥有的任何密钥的所有者指定信任级别。例如,即使我们知道Mike的公钥是可信的,但事实上我们在对其他密钥进行签名时不能相信Mike的判断;我们认为迈克可能只签署了几个密钥,但他没有正确检查它们。
设置信任级别的命令及其实现如下:
$ gpg-edit-key Mike @ hairnet . org pub 1024d/4f 03 BD 39 created:2001-01-15 expires:never trust:-/fsub 1024g/fdbb 477d created:2001-01-15 expires:never(1)Mike Socks(我已连线)命令信任1=不知道2=不信任3=勉强信任4=完全信任s=请显示更多信息m=返回主菜单您的决定?2命令退出$
在命令编辑环境中执行trust,然后选择level 2(我不信任),这样我们就切断了任何信任链,每一个密钥都必须有Mike的签名。
6.删除密钥
从私钥环中删除密钥:
# gpg -删除-秘密-密钥hyphenwang@redflag-linux.com
gpg(GnuPG)1 . 4 . 5;版权所有(C) 2006自由软件基金会。
这个程序绝对没有担保。
这是自由软件,欢迎您重新发布
在特定条件下。详见文件复制。
连字符王(用于加密)
您想从密钥环中删除此密钥吗?(是/否)是
这是私钥!-您真的要删除它吗?(是/否)是
# gpg -删除键hyphenwang@redflag-linux.com
gpg(GnuPG)1 . 4 . 5;版权所有(C) 2006自由软件基金会。
这个程序绝对没有担保。
这是自由软件,欢迎您重新发布
在特定条件下。详见文件复制。
连字符王(用于加密)
您想从密钥环中删除此密钥吗?(是/否)是
三。对称加密:
当然GPG也有常见的对称加密功能,所以这个时候你不需要密钥,用密码加密就可以了(注意这里的密码不一定是你私钥的密码,可以随意设置)。
gpg -o文档. gpg -c文档
-
四。GPG的通用参数:
-s,-sign[文件名]以生成签名。
-clear sign[文件名]生成清晰的签名。
-b -b,- detach-sign生成分离的签名。
-e,-encrypt加密数据
-c,-symmetric只使用对称加密。
-d,-解密数据(默认)
-验证验证签名
- list-keys列出密钥。
- list-sigs列出密钥和签名。
- check-sigs列出并检查密钥签名。
- fingerprint列出了按键和指纹。
-k,-list-secret-keys列出私钥。
- gen-key生成新的密钥对。
- delete-keys从公钥环中删除密钥。
- delete-secret-keys-keys从私钥的密钥环中删除密钥。
- sign-key向密钥添加签名。
-l sign-key向密钥添加本地签名。
- edit-key编辑密钥或向其添加签名。
- gen-revoke生成吊销证书。
-导出导出密钥
- send-keys将密钥导出到公钥服务器。
- recv-keys从公钥服务器导入密钥。
- search-keys在公钥服务器上搜索密钥。
- refresh-keys从公钥服务器更新所有本地密钥。
-导入导入/合并密钥
-卡状态打印卡的状态。
-卡-编辑以更改卡上的数据
- change-PIN更改卡的PIN。
- update-trustdb更新信任数据库。
- print-md algorithm [file]使用指定的哈希算法打印消息哈希值。
选项:
-a,-装甲输出打包成ASCII码。
-r,-收件人A加密收件人“A”
-u -u,-local-用户使用此用户ID进行签名或解密。
-z N将压缩级别设置为N (0表示不压缩)
- textmode使用标准文本模式。
-o,-output指定输出文件。
-v,-详细模式
-n -n,-模拟运行不会进行任何更改。
-I,-覆盖前交互询问。
- OpenPGP行为严格遵循OpenPGP的定义。
- pgp2生成与pgp2.x兼容的消息。
示例:
-se-r Bob[文件名]签名并加密Bob作为收件人。
-clear sign[文件名]以纯文本形式签名。
-detach-sign[文件名]单独签名。
- list-keys [A]显示键。
-指纹[a]显示指纹。
-
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。