如何在给定公钥/私钥的情况下实现PGP加密/解密
本文关键字:实现 情况下 PGP 加密 解密 私钥 公钥 | 更新日期: 2023-09-27 17:52:47
我想我知道基本的:
- 基于公钥加密,每个人都有一个公开的&私钥
- 发送方使用接收方的公钥加密。
- 接收方使用自己的私钥解密。
但这还不足以实现这个。例如,使用什么加密算法以及如何实现?
在。net中给出消息和相关密钥,编写一个可通过的pgp加密/解密库有多困难?
我在哪里可以找到这个的标准算法?
OpenPGP在RFC 4880中定义。
它是一个高级协议,使用各种各样的加密算法,有些是强制性的(3DES, DSA, Elgamal, SHA-1),其他也应该实现(RSA, AES, SHA-2,压缩,…)。特别建议而不是自己实现这些基本算法以防止大量的侧信道和定时攻击,而是依赖现成的加密库(GnuTLS, OpenSSL)。
如果您希望基于这些现有算法实现OpenPGP消息格式,请务必阅读安全注意事项和实现要点章节,其中有一些关于可能的攻击和兼容性问题的重要信息。
如果你的主要目标是学习OpenPGP和加密技术,我建议你看看BouncyCastle(它已经有了c#和Java实现),GnuPG(它可能是拥有最大用户基础的OpenPGP实现,几乎每个Linux发行版都附带了它,但也可以用于Windows)或OpenPGP。Go库(用well, Go写的)。它们都是开源的,可能在它们的bug跟踪器(BouncyCastle, GnuPG)中有有趣的问题需要解决。
Bouncy Castle有一个。net API,可以用来加密/解密文件/数据。(源代码包含在他们的网站上)
这里有一些示例代码演示如何加密数据。
我用过,效果很好。