如何使用C#加密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,并且试图了解要使用此密钥加密的数据需要做什么.
解决方法:
尽管OpenPGP利用RSA和其他标准算法,但是您不能使用默认的C#RSACryptoServiceProvider. RSA只是OpenPGP的一种可能算法,此外,您还需要一些对称加密算法,例如AES(也可以使用).但是还存在其他问题:您需要为OpenPGP message format和OpenPGP 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.
标签:cryptography,rsa,pgp,openpgp,c 来源: https://codeday.me/bug/20191119/2035232.html