将使用GnuPG生成的私有RSA密钥导入C#

时间:2015-09-01 11:10:50

标签: c# cryptography gnupg openpgp

我想在我的C#应用​​程序中签名一些东西,但我需要使用之前使用GnuPG生成的私有RSA密钥,而不是在应用程序本身内生成的一个新密钥。

我可以用GnuPG导出RSA密钥并得到类似的东西(请注意,我在这里省略了大多数行,只是一个例子):

-----BEGIN PGP PRIVATE KEY BLOCK-----
lQOYBFXlhWwBCACfOGAw5Qr5ddFvDFZlDmys18KRV3XawArMiPe4hzivsEB3h+M1
df12Pz3l6IWnUJ/nJt/ZohwCOjm93+zT3xmGcAL9mh/lez6+UoQB8uB0hJ1ltLnZ
8RumvpExXJ2c6LfmaLrwyLHLUSAu8mfV6KoLtD9OxHkIdHktKpBzIPkLG9lRNAmN
kzjI9sz7pLq80+YevPA60niI0SBwbmJTHluvEQB32BkcEQ==
=u3H/
-----END PGP PRIVATE KEY BLOCK-----

现在问题是:如何将其导入C#加密子系统,以便我可以用它来签名?

2 个答案:

答案 0 :(得分:3)

C#的内置加密库只支持X.509,而不支持OpenPGP;虽然主要使用相同的加密算法,但两者都不兼容。您可能能够以某种方式提取RSA素数并导入它们,但是库仍然无法生成有效的OpenPGP输出。

使用Bouncy Castle library代替,这是C#(或接口GnuPG的OpenPGP实现,例如通过GPGME,但C#绑定仍然是alpha版本。)

答案 1 :(得分:1)

你所引用的并不是一个“RSA密钥”,而是一个装甲的OpenPGP私钥,可能包含RSA密钥材料,还包括其他内容。

正如在另一个答案中所说,如果没有第三方库,您将很难将其导入C#(特别是在Unity中)。如果您需要这个作为一次性操作,您可以使用我们的SecureBlackbox(评估就足够了),加载OpenPGP密钥,然后获取密钥材料并将其保存为以后可以加载到Unity的格式。

如果您计划定期执行此类操作,则在C#中编写密钥生成器并生成适合您需要的RSA密钥(无需OpenPGP)是有意义的。