如何使用C#加密OpenPGP密钥

本文关键字:OpenPGP 密钥 加密 何使用 | 更新日期: 2023-09-27 18:26:25

我的任务是添加一个系统,该系统允许我的公司加密文件,以便我们可以将它们发送给第三方,他们可以对我们的数据运行一些操作。第三方给了我一个这种格式的公钥,

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.18 (Darwin)
mQGiBFU1gfQRBACekfIt7mSynzBi0C2hIbvWM6mMh80ypw8NNvdCpOIfSwLVavej
YIESXe5yLGzWUoTnHALa5JHLJ2C3faeDHRBikXRESycRHz0itz3L/mlyIPLo7T1n
4zr2wUL+h0ZEmuhLeVBD+yLKzy68suEWXCcTkeh71vYG1r77RFJLtQHIfwCgu9DW
uJC8IHzXMrspotFIb0XF/VsD/iqdfRgdu7CkvUflwQsT66CmZcyfkkZkWpHXZoov
GP3ZCVKPfGEZqlThwuqgBCBbtsyZFSSmF8m5qjL/Dtz+t3/fxxTo1lXRr9P4f4Pl
n3OYQh+iOs1Z+7nnAZ4mulU1eRPYUY21e+UwKi+hd1Qe1ADOaH/9JVS8nrodePCO
qBFvBACXKEWpP937fZv1hGdqZ2OUM44RIf0PGbQwyG8a+DsksJgd0oY+sb5nTaB/
CgsEFgIDAQIeAQIXgAAKCRDEcHC8uF0CrVnTAJwLdvuBjv/Z8lySVZS7jInljU9y
sACdEtxmspV/GH7EDY0KtIydy3Vn8/eIXgQQEQgABgUCVTWCPAAKCRArjD/JWo9s
KvwNAP9CkZgMGn98wwMAixW5tIVA+J5kvdxnleg/wrR9xHsFYQD+KMraOkHSk10p
1EckgFK6LTuVqMvUoK9Gvr8v0rrHucW5Ag0EVTWB9BAIAP12dtlu0EuQ4s78ZWhM
cDJmpqot5FbMecPF20V5LsDFYbLGylEPPFFxNhwsc/l0Rlvg7auH2fcLSZf5hEp9
NsBhgWD532CAim9bFYF1s2bbjlZ7jUQD/Dt+9j1d9YrgCkF2/9er7RyfYwsRlVDQ
1nRCFLoQWLqisoILG65oloVtjNg6xftyLaLb6UuluW8dRM7q/9EvE0xPAX1ukc33
iGDWeMUR0JHyuM1QiN4IhOHKjP6Oqy+lJWtgoCQmxPJ2+Qj6b34wtsfD9vh3xLef
68ReXEOlfQ01tv6hQCrK/ZdvPLk38kVnwPOEJl/Hgj5eiVM3ioOlmBQoXKSpXyXI
wMKnovOEqJ2btp39XNpjjcV80RZiAJyAhNz2EynZk15QhOnabo9gdsiaMpBZdSdc
gDHowOXsWxzaVESs+SwJf/N2fa3j1UTDxCKkq5TOofvOfyPAYYASstmPw1v7xIcV
zn2nkKfBk1EnFM5PfwQAfXKUTx6BrZmITwQYEQgADwUCVTWB9AIbDAUJAsfqAAAK
CRDEcHC8uF0CrTI6AJ4oAZ2y4Pcahp+SRSNSW7Nijqdv2QCgnJ2EauQgU+rSyHyy
lkp3zJGdJTU=
=k/9l
-----END PGP PUBLIC KEY BLOCK-----

我可以把这个文本字符串直接粘贴到C#中的RSACryptoServiceProvider类中作为公钥吗?或者还有比这更多的东西吗?我以前没有使用过PGP,我正试图知道我需要做什么才能使用此密钥加密数据。

如何使用C#加密OpenPGP密钥

尽管OpenPGP利用了RSA和其他标准算法,但您不能使用默认的C#RSACryptoServiceProvider。RSA只是OpenPGP的一种可能的算法,此外,您还需要一些对称加密算法,如AES(也可以使用)。但还有更多的问题:您需要实现OpenPGP消息格式的生成器,而OpenPGP定义了自己的密码模式。独自实现所有这些不仅会带来不兼容的麻烦(RFC中存在一个不完整的列表,而且有很多方法可以包括安全问题(GnuPG等现有实现已经提出并缓解了一系列有趣的攻击)。

如果你想使用C#中的OpenPGP,最终可以归结为以下几种选择:

  • 通过GPGME使用GnuPG(但包装器似乎仍处于alpha状态)
  • 使用BouncyCastle,它有几个加密协议的本地实现,包括用于C#和Java的OpenPGP,但C#实现似乎没有那么广泛,而且功能也不太强大
  • SharpPrivacy是另一个实现,但似乎已经死了
  • 直接连接GnuPG命令行

所有这些都有优点和缺点。BouncyCastle可能是最好的方法,如果它不支持所需的功能,您可能不得不放弃在命令行上调用GnuPG命令。

GitHub上似乎有一个C#库,但它已经有几年的历史了。我相信,如果你想实现自己的PGP加密,它可以为你指明正确的方向。https://github.com/da2ce7/SharpPrivacy

还有一篇关于它的代码项目文章,但它相当古老,引用了一个似乎不再存在的网站。这里有一个链接,供参考http://www.codeproject.com/Articles/4284/SharpPrivacy-OpenPGP-for-C.