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

Importing a private RSA key generated with GnuPG into C#

我想在我的 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# 加密子系统以便我可以使用它进行签名?

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

使用 Bouncy Castle library instead, which is an OpenPGP implementation for C# (or interface GnuPG, for example through GPGME,但 C# 绑定仍然是 alpha 版本)。

您引用的不完全是 "RSA key",而是一个装甲的 OpenPGP 私钥,其中可能包含 RSA 密钥 material 并且还包含其他内容。

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

如果您计划定期执行此类操作,那么在没有 OpenPGP 的情况下,用 C# 编写密钥生成器并生成适合您需要的 RSA 密钥是有意义的。