如何使用公钥/私钥实现PGP加密/解密

时间:2015-06-01 20:04:11

标签: c# .net encryption cryptography pgp

我想我知道基本知识:

  • 基于公钥加密技术,每个人都有一个公共密钥和一个公共密钥。私钥
  • 发件人使用收件人的公钥加密。
  • 收件人使用自己的私钥解密。

但这还不足以实现这一点。例如,使用了什么加密算法以及如何实现?

在给定消息和相关密钥的情况下,在.NET中编写可通过的pgp加密/解密库有多难?

我在哪里可以找到标准算法?

2 个答案:

答案 0 :(得分:2)

Bouncy Castle有一个.NET API,可用于加密/解密文件/数据。 (源代码包含在他们的网站上)

有一些示例代码here演示了如何加密数据。

我已经使用它并且效果很好。

答案 1 :(得分:2)

OpenPGP在RFC 4880中定义。

这是一个高级协议,使用broad variety of cryptographic algorithms,有些是强制性的(3DES,DSA,Elgamal,SHA-1),其他也应该实现(RSA,AES,SHA-2,压缩) ,...)。特别建议 not 自己实现这些基本算法以防止大量的侧通道和定时攻击,而是依赖现有的加密库(GnuTLS,OpenSSL)。

如果要基于这些现有算法实现OpenPGP消息格式,请务必阅读Security ConsiderationsImplementation Nits 章节,其中包含有关可能需要考虑的攻击和兼容性问题的重要信息。

如果您的主要目标是了解OpenPGP和密码术,我建议您研究BouncyCastle(已经有C#和Java实现),GnuPG(可能是OpenPGP)具有最大用户群的实现,并且随附几乎所有Linux发行版,但也适用于Windows)或OpenPGP.go library(写得很好,go)。所有这些都是开源的,并且可能在他们的错误跟踪器中解决有趣的问题(BouncyCastleGnuPG)。