2015-09-01 40 views
2

我想签我的C#应用​​程序中的一些东西,但我需要与我以前使用GnuPG,而不是内产生一个新的密钥生成的RSA私钥这样做应用本身。导入使用GnuPG生成到C#中的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#密码子系统中,以便我可以使用它来签署事物?

+0

尝试Windows的'Xca'工具来生成密钥。 – i486

回答

3

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

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

+0

感谢您的回答。我在Unity内部使用C#,它有一些限制,所以如果可以的话,我更喜欢避免使用第三方库。如果我将GPG密钥导出到X509,该怎么办?这有可能将这样的密钥导入到我的C#代码中吗? –

+1

你想实现什么?如果您想拥有OpenPGP签名,则无法在没有其他库的情况下执行此操作。如果你不需要它们,我会建议从头开始生成X.509证书/密钥。 –

+0

你可能是对的。我只需要签署请求并将其发送到服务器,无论PHP脚本是否使用此功能检查签名: http://php.net/manual/en/function.openssl-verify.php I认为这些东西足够标准,所以RSA密钥总是RSA密钥,有些使用RSA密钥签名的任何软件都可以通过支持RSA签名的软件进行验证。看来我错了,有很多的格式和变化...... :-( –

1

你报的什么是不完全的“RSA密钥”,而是一个装甲的OpenPGP私钥这可能包括RSA密钥材料,也包括其他的东西。

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

如果您打算定期执行这样的操作,是有意义的C#编写密钥生成器和生成适合您的需求,又不OpenPGP的RSA密钥。

+0

非常感谢!这也不是一个坏主意,但是我将不得不处理识别C#生成的键的服务器部分。我想我会尝试使用SSL,这似乎是一个完善的标准,并看看会发生什么...... –