pgp如何打开
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pgp如何打开相关的知识,希望对你有一定的参考价值。
今天收到一封邮件,打开后带有附件,附件下载后后缀是pgp格式的,请问该如何打开,如果可以追加分数
PGP后缀的文件是经过PGP Desktop加密的文件。下载PGP Desktop,安装之后可打开。
PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。可以用它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。它可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。它采用了一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。它的功能强大,有很快的速度。
参考资料:http://baike.baidu.com/link?url=NO2V_5_6bPh3lPOPAxbfkwAgOL-ZL6FMBT9I1sFE9v-2PMrY4RiWi-h-FwqY6WvnA_10bh7k5p7yZkVZihr5UK 参考技术A PGP—Pretty Good Privacy,是一个基于RSA公匙加密体系的邮件加密软件。可以用它对你的邮件保密以防止非授权者阅读,它还能对你的邮件加上数字签名从而使收信人可以确信邮件是你发来的。它让你可以安全地和你从未见过的人们通讯,事先并不需要任何保密的渠道用来传递密匙。它采用了:审慎的密匙管理,一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。它的功能强大,有很快的速度。而且它的源代码是免费的。
1.下面简介与PGP相关的加密、解密方法以及PGP的密钥管理机制。
PGP是一种供大众使用的加密软件。电子邮件通过开放的网络传输,网络上的其他人都可以监听或者截取邮件,来获得邮件的内容,因而邮件的安全问题就比较突出了。保护信息不被第三者获得,这就需要加密技术。还有一个问题就是信息认证,如何让收信人确信邮件没有被第三者篡改,这就需要数字签名技术。RSA公匙体系的特点使它非常适合用来满足上述两个要求:保密性(Privacy)和认证性(Authentication)。
RSA(Rivest-Shamir-Adleman)算法是一种基于大数不可能质因数分解假设的公匙体系。简单地说就是找两个很大的质数,一个公开即公钥,另一个不告诉任何人,即私钥。这两个密匙是互补的,就是说用公匙加密的密文可以用私匙解密,反过来也一样。
假设甲要寄信给乙,他们互相知道对方的公匙。甲就用乙的公匙加密邮件寄出,乙收到后就可以用自己的私匙解密出甲的原文。由于没别人知道乙的私匙,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面由于每个人都知道乙的公匙,他们都可以给乙发信,那么乙就无法确信是不是甲的来信。这时候就需要用数字签名来认证。
在说明数字签名前先要解释一下什么是“邮件文摘”(message digest)。邮件文摘就是对一封邮件用某种算法算出一个最能体现这封邮件特征的数来,一旦邮件有任何改变这个数都会变化,那么这个数加上作者的名字(实际上在作者的密匙里)还有日期等等,就可以作为一个签名了。PGP是用一个128位的二进制数作为“邮件文摘”的,用来产生它的算法叫MD5(message digest 5)。 MD5是一种单向散列算法,它不像CRC校验码,很难找到一份替代的邮件与原件具有同样的MD5特征值。
回到数字签名上来,甲用自己的私匙将上述的128位的特征值加密,附加在邮件后,再用乙的公匙将整个邮件加密。这样这份密文被乙收到以后,乙用自己的私匙将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公匙解密签名所得到的数比较,如果符合就说明这份邮件确实是甲寄来的。这样两个安全性要求都得到了满足。
PGP还可以用来只签名而不(使用对方公钥)加密整个邮件,这适用于公开发表声明时,声明人为了证实自己的身份,可以用自己的私匙签名。这样就可以让收件人能确认发信人的身份,也可以防止发信人抵赖自己的声明。这一点在商业领域有很大的应用前途,它可以防止发信人抵赖和信件被途中篡改。
2.PGP的技术原理如下:
PGP加密系统是采用公开密钥加密与传统密钥加密相结合的一种加密技术。它使用一对数学上相关的钥匙,其中一个(公钥)用来加密信息,另一个(私钥)用来解密信息。
PGP采用的传统加密技术部分所使用的密钥称为“会话密钥”(sek)。每次使用时,PGP都随机产生一个128位的IDEA会话密钥,用来加密报文。公开密钥加密技术中的公钥和私钥则用来加密会话密钥,并通过它间接地保护报文内容。
PGP中的每个公钥和私钥都伴随着一个密钥证书。它一般包含以下内容:
密钥内容(用长达百位的大数字表示的密钥)
密钥类型(表示该密钥为公钥还是私钥)
密钥长度(密钥的长度,以二进制位表示)
密钥编号(用以唯一标识该密钥)
创建时间
用户标识 (密钥创建人的信息,如姓名、电子邮件等)
密钥指纹(为128位的数字,是密钥内容的提要表示密钥唯一的特征)
中介人签名(中介人的数字签名,声明该密钥及其所有者的真实性,包括中介人的密钥编号和标识信息)
PGP把公钥和私钥存放在密钥环(KEYR)文件中。PGP提供有效的算法查找用户需要的密钥。
PGP在多处需要用到口令,它主要起到保护私钥的作用。由于私钥太长且无规律,所以难以记忆。PGP把它用口令加密后存入密钥环,这样用户可以用易记的口令间接使用私钥。
PGP的每个私钥都由一个相应的口令加密。PGP主要在3处需要用户输入口令:
需要解开受到的加密信息时,PGP需要用户输入口令,取出私钥解密信息
当用户需要为文件或信息签字时,用户输入口令,取出私钥加密
对磁盘上的文件进行传统加密时,需要用户输入口令
PGP中国社区与网络实名制
PGP中国是一个促进民间组织,它的宗旨是促进中国人使用PGP签名对自己言行负责。
网络实名制的步伐逐渐迫近,中国信产部的议案的提出基础是防止匿名制带来的人身攻击,但是至今仍然无法真正实施。除了技术上的可行性很低之外,还有一个问题是中国政府需要在2种人的基本权利之间进行博弈:人的名誉权和人的私隐权。
侵犯人的名誉权的案件近年来被逐渐增多,包括明星,政要以及市井街民,无不被这些侵犯名誉权的事件所困扰,随着互联网的不断开放,中国人更容易找到一个攻击对手的平台,而且带来的问题也逐渐增多。一些让人伤感的人物包括被强奸视频困扰的刘嘉玲,被匿名文章揭露派人强奸翁美玲导致后者自杀的沈殿霞,被匿名人士将自拍的性爱视频公之于网导致其跳楼自杀的南洋理工学院女大学生......
所有这些,让我们开始反省,物质富裕的年代,对人的精神伤害往往甚于身体伤害。因此,我们需要惩罚那些不负责任的造谣和肇事者。但互联网本身为这些人带来的便利,他们可以轻松的散布谣言,而我们往往不知道他们是谁。
于是,我们求助于实名制。
但实名制的结果是为了保护一部分人而损害了另外一部人的利益,它确实是一种很难取舍的博弈,它对整个社会的影响都很大,主要体现是限制了很多人的基本自由权,而且,实施实名制带来的副作用也非常严重,可能会使很多人的私隐权和言论自由将受到损害。
《外滩画报》副主编张平说到:
“网络实名制的荒谬之处是十分明显的。古今中外,任何人都拥有用别名(笔 名)发表文章的权利,我国的《著作权法》也明文保护这样的权利。巴尔扎克、司汤达、鲁迅、金庸不都是笔名吗 ?如果把他们的作品搬上网络,难道一定要改回奥诺雷·巴尔萨、马利·亨利·贝尔、周树人、查良镛吗?”
大部分反对实名制的朋友的基本出发点是,实名制侵犯的人的基本权利,实名制对言论自由的影响不大,但人们担心是操纵这些实名制背后,人的私隐权如何得到保障。
比如说,我必须对自己的言论负责吗?但如果我的帐号被其他用盗用了呢?!
比如说,网站的管理员能够清楚知道我的基本信息,如何保障我的私隐不会被他用于商业用途?依靠良知?!
比如说,而且实名制的实施本身也很难,比如说,我到网上注册一个帐号,有什么办法可以阻止我用别人的身份去注册?!
所有这些问题,都非常困扰 .......
人大还没有立法,一切还在摸索之中.......
但我相信而且肯定,在绝大多数情况下,从另外一个侧面,PGP技术会大大改善这些问题。
网络实名制面临的问题是,它非常难以实施,他影响全中国数千万个网站,如果要将这些网站,系统切换到实名制,则工程之浩大,甚于建造当年的长城。
PGP(Pretty Good Privacy)又称为Pretty Good Privacy,它原本用于保护私隐信息,但同时,它也可以用来数字签名,数字签名可以确保某一篇文章确实出自于某人,如果所有的人写文章都使用了PGP数字签名,而数字签名具有不可抵赖性,因此,我们可以将之作为基本证据来举证某人曾经写过XXXX的文章。
比如,我本人的Blog放在:http://openssl.blogjava.net,某些涉及本人观点的重要的文章我通常会进行数字签名,这样的目的很简单,我需要对自己的言论负责!
每一篇文章,一旦我签名之后,网友便可以复制下来,然后作为电子证据去举证我(假如我盗用了别人的观点,我侮辱了其他人,我造谣了某些事实等)。
PGP的使用很简单,我们每个人都在自己的电脑上通过PGP软件生成一对钥匙,我们用其中一条钥匙(私人钥匙)对自己的文章签名,然后向所有公众公开自己的另外一条钥匙(公开钥匙) ,于是,别人就可以用公钥钥匙对私人钥匙签名过的东西进行验证。
在Dev2Dev广州UserGroup以及其他一些论坛,我已经开始使用PGP签名,我认为这是一种很好的主动的办法去对自己的言论负责。
有一些国内的实名制专家提倡使用PKI/CA技术去实现统一的认证机构,但我本人认为这种技术还不可行,原因是因为,这样一个庞大的CA团体,等同于建立一套比中国公民身份证系统更复杂的技术,而且实施的对象是13亿人,成本之高,匪夷所思!单是申请数字证书的过程,估计要耗掉中国上千亿美金,而且还没有考虑到这些证书的过期,吊销带来的问题。
PGP技术之所以适合,是因为它并没有使用CA的统一认证方式,每个人都只需要一个邮件帐号以及安装一套PGP客户端软件,便可以使用软件对任何言论进行签名。
PGP的公钥匙需要公布的,公布的渠道是PGP.ORG.CN, 但是验证用户确凿身份的过程可能有点复杂,需要一定的时间,简单流程如下:
1,用户A必须拥有一个邮箱(比如163,126,sina, hotmail, gmail....)
2,用户A根据自己的邮箱生成PGP私钥和公钥,私钥保存起来,千万别泄露出去,否则别人可以用它来冒认签名
3,用户A将公钥发送到admin@pgp.org.cn
4,PGP中国审核后,会将用户A的公钥公布到www.pgp.org.cn
5,用户A可以在任何论坛发表言论,在发表言论的同时,对自己的言论进行PGP签名,用户A将签名也发布到网站上
6,用户B看到用户A的言论,觉得其言论损害了自己的名誉权,则复制该言论(包含了PGP签名), 作为电子证据将来举证用户A侵犯其权利,举证方式很简单,到PGP.ORG.CN获取用户A公布的公钥,通过PGP软件验证签名。
PGP签名,都是建立在一种对自己的言论负责的基础之上,它是一种鼓励性而非强制性的技术,在未来,我们确实很需要那些论坛,网站,尽可能实施PGP条例,比如说,某些敏感观点的文章/论坛,必须要求用户提供PGP签名,否则不许发帖。
另外,PGP签名可以解决私隐权的问题,对于一些属于个人私隐的东西,我们并不要求用户签名,同时,用户无需向众多的网站/论坛提供自己的私隐信息。
你的私隐会得到充分的尊重,对于更多关于PGP技术,请浏览PGP中国网站。http://www.pgpi.com/ 参考技术B 如果你的电脑安装了pgp软件,将附件保存到本机,双击两下就可以了,不过要先知道这个文件是签名还是密文,如果是签名,你要向发邮件人索要对方的公钥,如果是密文,那么你应该有解密的密钥.
PGP中国
http://www.pgp.cn本回答被提问者采纳
如何在 jruby9.1.2.0 中使用 PGP 加密对文件进行加密?
【中文标题】如何在 jruby9.1.2.0 中使用 PGP 加密对文件进行加密?【英文标题】:How to encrypt a file using PGP encryption in jruby9.1.2.0? 【发布时间】:2017-04-09 15:32:05 【问题描述】:我正在尝试在将文件发送到我的 jruby 项目之前使用 gpg 加密对文件进行加密。但是我没有找到足够的资源。我尝试使用ruby-gpgme,但 jruby 不支持 C 库。我尝试阅读Bouncy Castle,但我被类文档所淹没,并没有找到加密文件的简单文章。
Vivek 在this 问题中的回答接近我的解决方案,但只有解密文件的解决方案。我目前正在关注this article 并尝试在 jruby 中连接 java 代码,但无济于事。我认为encryptFile
函数是我需要的,如下所示:
public static void encryptFile(
OutputStream out,
String fileName,
PGPPublicKey encKey,
boolean armor,
boolean withIntegrityCheck)
throws IOException, NoSuchProviderException, PGPException
Security.addProvider(new BouncyCastleProvider());
if (armor)
out = new ArmoredOutputStream(out);
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);
PGPUtil.writeFileToLiteralData(
comData.open(bOut),
PGPLiteralData.BINARY,
new File(fileName) );
comData.close();
BcPGPDataEncryptorBuilder dataEncryptor = new BcPGPDataEncryptorBuilder(PGPEncryptedData.TRIPLE_DES);
dataEncryptor.setWithIntegrityPacket(withIntegrityCheck);
dataEncryptor.setSecureRandom(new SecureRandom());
PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(dataEncryptor);
encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey));
byte[] bytes = bOut.toByteArray();
OutputStream cOut = encryptedDataGenerator.open(out, bytes.length);
cOut.write(bytes);
cOut.close();
out.close();
)
我收到以下错误:
NoMethodError: undefined method `ZIP' for Java::OrgBouncycastleOpenpgp::PGPCompressedData:Class
在
PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);
如果您能在代码或整个 jruby 中使用 gpg 加密文件帮助我,那将是一个很大的帮助。
更新 1 ZIP 值原来是整数值的常量,并列在this 页面中。
更新 2 我做到了:
PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(dataEncryptor);
encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey)); // encKey is class PGPPublicKey's instance
我有从操作系统生成的公钥。如何从我拥有的公钥字符串创建 PGPPublic Key 实例encKey
?
【问题讨论】:
ZIP
可能是类常量而不是方法。尝试使用PGPCompressedData::ZIP
来引用类常量而不是.ZIP
来引用类方法。
是的,我从这个页面找到了相应的 zip 常量值。 bouncycastle.org/docs/pgdocs1.5on/…
我仍在尝试围绕它编写一个包装器,只是为了加密。非常感谢您的帮助。
是的,在 Ruby 中 PGPCompressedData.zip
会调用一个方法。您想在类中引用一个常量。使用::
而不是.
应该可以解决问题。用PGPCompressedData.constants.sort
和PGPCompressedData.methods.sort
反思PGPCompressedData
也可能有所帮助。如果 PGPCompressedData.ZIP
是常量,则将 PGPCompressedData.ZIP
替换为 PGPCompressedData::ZIP
应该这样做。
@EnabrenTane 我刚刚传递了整数值。
【参考方案1】:
我找不到足够的答案或 gem 来完成它,包括项目文件夹中的 pgp 库。所以我将this repo 分叉到this repo 以连接rails 和系统的gpg 库。它适用于ubuntu。我没有在其他机器上测试过。
加密:
在安装了公钥的机器上
encryptObj = Gpgr::Encrypt::GpgFileForEncryption.new
encryptObj.email_address = <email_of_gpg_owner>
encryptObj.file = <path_to_file_to_encrypt>
encryptObj.file_output = <path_to_output_file>
encryptObj.encrypt
解密
在有私钥的机器上
decryptObj = Gpgr::Decrypt::GpgFileForDecryption.new
decryptObj.file = <path_to_file_to_decrypt>
decryptObj.file_output = <path_to_output_file>
decryptObj.decrypt
【讨论】:
以上是关于pgp如何打开的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 OpenPGP.js 在 Objective-C 中加密/解密 PGP 消息