【问题标题】:Importing a private RSA key generated with GnuPG into C#将使用 GnuPG 生成的私有 RSA 密钥导入 C#
【发布时间】:2015-09-01 11:10:50
【问题描述】:

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

【问题讨论】:

  • 试试Xca Windows 工具生成密钥。

标签: c# cryptography gnupg openpgp


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我在 Unity 中使用 C#,它有一些限制,所以如果可以的话,我更愿意避免使用第三方库。如果我将 GPG 密钥导出到 X509 会怎样?这样可以将这样的密钥导入我的 C# 代码吗?
  • 你想达到什么目的?如果您想拥有 OpenPGP 签名,那么没有更多库就无法做到这一点。如果您不需要它们,我建议您从一开始就生成 X.509 证书/密钥。
  • 你可能是对的。我只需要对请求进行签名并将其发送到服务器,PHP 脚本是否会使用此函数检查签名:php.net/manual/en/function.openssl-verify.php 我认为这些东西足够标准,因此 RSA 密钥始终是 RSA 密钥,并且有些已签名任何支持 RSA 签名的软件都可以使用 RSA 密钥进行验证。看来我错了,有很多格式和变体...... :-(
  • 我同意你的观点。此外,我不能仅使用客户端应用程序中的 SslStream 类及其自己的证书并使用 Apache SSL 内置功能在另一端处理所有内容来实现相同的目的吗?因此,PHP 脚本只需要询问 Apache 服务器客户端是否已通过身份验证。我认为这会使事情变得更加简单。无论如何,我选择你的答案作为我的问题的最佳答案,因为它是准确的,并且是我收到的第一个:总结起来,这个问题的答案是我不能直接将那些 GPG 密钥用于 C#没有第三方库的代码。
  • 如果您只需要身份验证,那么您的提议似乎是一件非常合理的事情。最少的工作量,通用且经过验证的技术。
【解决方案2】:

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

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

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

【讨论】:

  • 非常感谢!这也不是一个坏主意,但是我将不得不处理服务器部分来识别 C# 生成的密钥。我想我会尝试使用 SSL,这似乎是一个成熟的标准,看看会发生什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多