如何使用C#加密OpenPGP密钥?

时间:2015-12-11 20:06:29

标签: c# cryptography rsa pgp openpgp

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

-----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合作过,我试图知道我需要做什么才能使用这个密钥加密数据。

2 个答案:

答案 0 :(得分:2)

虽然OpenPGP利用了RSA和其他标准算法,但您无法使用默认的C#RSACryptoServiceProvider。 RSA只是OpenPGP的一种可能算法,而且您还需要一些像AES这样的对称加密算法(也可以使用)。但还有一些问题:您需要为OpenPGP message formatOpenPGP defined its own cipher mode实施生成器。自己实现所有这些不仅是一个涉及不兼容性的麻烦(an incomplete list exists in the RFC,而且还有很多方法可以包含security issues(并且已经提出并通过现有实现减轻了一堆有趣的攻击像GnuPG)。

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

  • use GnuPG through GPGME(但包装器似乎仍处于alpha状态),
  • 使用BouncyCastle,它具有几种加密协议的本机实现,包括用于C#和Java的OpenPGP,但C#实现似乎不那么广泛,并且不那么强大,
  • SharpPrivacy是另一种实现,但似乎已经死了
  • 直接连接GnuPG命令行

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

答案 1 :(得分:1)

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

还有一篇关于它的代码项目文章,但它已经很老了,引用了一个似乎不再起作用的网站。这是一个链接,以供参考 http://www.codeproject.com/Articles/4284/SharpPrivacy-OpenPGP-for-C