<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PGP on 隔叶黄莺 Yanbin's Blog - 软件编程实践</title><link>https://yanbin.blog/tags/pgp/</link><description>Recent content in PGP on 隔叶黄莺 Yanbin's Blog - 软件编程实践</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>yabqiu@gmail.com (Yanbin Qiu)</managingEditor><webMaster>yabqiu@gmail.com (Yanbin Qiu)</webMaster><copyright>Yanbin 隔叶黄莺</copyright><lastBuildDate>Thu, 30 Jul 2026 14:40:20 -0500</lastBuildDate><atom:link href="https://yanbin.blog/tags/pgp/index.xml" rel="self" type="application/rss+xml"/><item><title>PGP 加解密及 Java/Python 代码演示</title><link>https://yanbin.blog/pgp-encrypt-decrypt-java-python-example/</link><pubDate>Thu, 30 Jul 2026 14:40:20 -0500</pubDate><author>yabqiu@gmail.com (Yanbin Qiu)</author><guid>https://yanbin.blog/pgp-encrypt-decrypt-java-python-example/</guid><description>
&lt;p&gt;说起 PGP(Pretty Good Privacy) 的工作原理，类似早期的 TLS/HTTPS 的 RSA 密钥交换，只不过它不依赖于第三方的 CA，而是直接在两端以信任的方式直接交换了公钥和私钥。
它是基于以下几点进行工作的&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用工具(如 PGPTool 或 GnuPG) 生成公钥和私钥对，公钥发给加密方，私钥保存在解密方&lt;/li&gt;
&lt;li&gt;公钥加密的数据只能用相应的私钥解密，这是非对称加密&lt;/li&gt;
&lt;li&gt;由于非对称加密解密的计算量较大，通常用一个较小随机 Key 对数据进行对称加密，而只对 Key 用公钥进行非对称加密，再把对称加密的数据与非对称加密的 Key
发给解密方，在解密方用私钥解密出 Key, 再对数据进行解密。-- 这称之为混合加密，也是目前 HTTPS 的工作方式&lt;/li&gt;
&lt;li&gt;另外，在只持有公钥的一方可以对使用私钥加密的数据进行签名验证，验证数据是否是由持有私钥的一方签发的，这就是数字签名的工作原理&lt;/li&gt;
&lt;li&gt;PGP 也会对生成的私钥用一个口令对其进行加密，防止私钥被盗时进一步保护&lt;/li&gt;
&lt;li&gt;只用私钥可以做加解密与签名验证，如加密的数据能用相同的私钥解密，私钥签名再私钥验证。但交换私钥是不安全的，所以才有了可公开的公钥，非对称加密&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面用 GnuPG 和 Java 的 &lt;a href="https://www.bouncycastle.org/download/bouncy-castle-java/"&gt;Bouncy Castle 包&lt;/a&gt; 进行演示加解密的过程。&lt;/p&gt;</description></item></channel></rss>