2012-02-28 74 views
5

因此,我正在開發一個項目,將C#客戶端與現有服務器技術進行接口。其中一個要求是使用Diffie-Hellman的密鑰交換。C#中的1024位Diffie-Hellman

我們已經知道公共P和G,我需要生成一個1024位公鑰發送到服務器。

以下內容用於C++中的OpenSSL服務器端。目前我在通過P/Invoke調用的本地DLL中使用相同的代碼,並且它也可以工作。如果可能,我寧願消除本機DLL依賴關係。

char publicKey[128]; 
char P[128]; //this is set to a static 128-byte value, omitting for brevity 
unsigned long G = 2; 

DH* dh = DH_new(); 
dh->p = BN_new(); 
dh->g = BN_new(); 

BN_set_word(dh->g, G); 
BN_bin2bn(P, 128, dh->p); 
if(DH_generate_key(dh)) 
{ 
    BN_bn2bin(dh->pub_key, publicKey); 
} 

這生成一個1024位的公鑰。

我試過在BouncyCastle中使用DH類,但無論出於何種原因,我無法讓它給我一個1024位密鑰,它想要給我一個960位密鑰。可能是因爲我不知道我在做什麼。我無法找到關於如何使用這些類的實際解釋。

是否可以使用BouncyCastle DH類與上面發佈的OpenSSL DH代碼一樣工作?如果沒有,是否還有另一個C#實現會更好?

回答

3

這裏是工作的代碼示例+文章在CodeProject上有一個很好的評價:

http://www.codeproject.com/Articles/24632/Shared-Key-Generation-using-Diffie-Hellman

+0

我發現這篇文章之前,但它並沒有提供一個方法來設置P和G參數它只使用一隨機生成素數。不過,我只是再看一遍,看起來它可能不難修改它的工作。我會試一試。 – Gerald 2012-02-28 15:00:07

+0

事實證明,這篇文章中的代碼非常簡單,我實際上能夠理解Diffie-Hellman的過程 - 這比我意識到的要簡單得多 - 而且我能夠自己動手,工作得很好。所以我會接受答案。謝謝。 – Gerald 2012-02-28 17:11:43