2015-09-01 67 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,這似乎是一個完善的標準,並看看會發生什麼...... –