2012-02-28 14 views
5

तो मैं एक मौजूदा सर्वर तकनीक के साथ एक सी # क्लाइंट को इंटरफ़ेस करने के लिए एक प्रोजेक्ट पर काम कर रहा हूं। आवश्यकताओं में से एक डिफी-हेलमैन का उपयोग करके एक प्रमुख विनिमय है।1024-बिट डिफी-हेलमैन सी #

हम सार्वजनिक पी और जी को जानते हैं और मुझे सर्वर को भेजने के लिए 1024-बिट सार्वजनिक कुंजी उत्पन्न करने की आवश्यकता है।

ओपनएसएसएल के साथ सी ++ में सर्वर पक्ष पर निम्नलिखित का उपयोग किया जाता है। वर्तमान में मैं पी/Invoke के माध्यम से एक देशी डीएलएल में एक ही कोड का उपयोग कर रहा हूँ, और यह भी काम करता है। यदि संभव हो तो मैं मूल डीएलएल निर्भरता को खत्म करना पसंद करूंगा।

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-बिट सार्वजनिक कुंजी उत्पन्न करता है।

मैंने बाउंसीकास्टल में डीएच कक्षाओं का उपयोग करने का प्रयास किया है, लेकिन किसी भी कारण से मुझे इसे 1024-बिट कुंजी देने के लिए नहीं मिल सकता है, यह मुझे इसके बजाय 960 बिट कुंजी देना चाहता है। संभवतः क्योंकि मैं वास्तव में नहीं जानता कि मैं क्या कर रहा हूं। कक्षाओं का उपयोग करने के तरीके के बारे में वास्तविक स्पष्टीकरण के तरीके में मुझे बहुत कुछ नहीं मिला।

क्या ऊपर पोस्ट किए गए ओपनएसएसएल डीएच कोड के समान काम करने के लिए बाउंसीकास्टल डीएच कक्षाओं का उपयोग करना संभव है? यदि नहीं, तो क्या कोई और सी # कार्यान्वयन बेहतर काम करेगा?

उत्तर

3

यहाँ एक उत्कृष्ट रेटिंग के साथ एक काम कोड उदाहरण + CodeProject पर लेख है:

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

+0

मैंने पहले कि लेख मिला लेकिन यह पी स्थापित करने के लिए एक तरह से प्रदान नहीं करता है और जी पैरामीटर यह केवल एक का उपयोग करता है यादृच्छिक रूप से उत्पन्न प्राइम। हालांकि मैंने फिर से देखा और ऐसा लगता है कि इसे काम करने के लिए संशोधित करना मुश्किल नहीं हो सकता है। मुझे इसे एक मौका और देना होगा। – Gerald

+0

चूंकि यह पता चला कि उस आलेख में कोड इतना आसान था कि मैं वास्तव में डिफी-हेलमैन की प्रक्रिया को समझने में सक्षम था - जो मुझे एहसास से बहुत आसान था - और मैं अपना खुद का रोल करने में सक्षम था जो ठीक काम करता है। तो मैं जवाब स्वीकार करूंगा। धन्यवाद। – Gerald