2012-01-18 6 views
5

मैं निजी और सार्वजनिक कुंजी के लिए AsymmetricKeyParameter वस्तु है। यह देखने का सबसे आसान तरीका क्या है कि वे मेल खाते हैं?यह जांचने के लिए कि क्या निजी/सार्वजनिक कुंजी जोड़ी मिलान (.NET/BouncyCastle) का उपयोग करके मेल खाता है?

मैं कुछ पाठ (निजी कुंजी) एन्क्रिप्ट करने और कुछ पाठ (सार्वजनिक कुंजी) को डीक्रिप्ट करने की कोशिश कर रहा हूं। अभी तक मैं ऐसा करने में सक्षम नहीं हूं लेकिन यह गलत दृष्टिकोण की तरह लगता है।

अद्यतन:

X509Certificate2 c = new X509Certificate2(@"certificate.cer"); 
byte[] privateKeyData = System.IO.File.ReadAllBytes(@"private.key"); 
Org.BouncyCastle.X509.X509Certificate cert = DotNetUtilities.FromX509Certificate(c); 


RsaPrivateCrtKeyParameters privateKey = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyData); 
RsaKeyParameters publicKey = (RsaKeyParameters)cert.GetPublicKey(); 

if (privateKey.Modulus.Equals(publicKey.Modulus) && publicKey.Exponent.Equals(privateKey.PublicExponent)) 
{ 
    //they match 
} 
+0

आप सार्वजनिक कुंजी के साथ decrypting रहे हैं, तो आप वास्तव में डेटा पर हस्ताक्षर के बजाय एन्क्रिप्ट करने के लिए प्रयास कर रहे हैं? – weston

+0

मैं चाबियाँ से मेल खाना चाहता हूं, मुझे नहीं पता कि इसे करने के बारे में कैसे जाना है। –

उत्तर

6

यह जांचने का सबसे आसान तरीका है कि निजी कुंजी और सार्वजनिक कुंजी मिलान सार्वजनिक कुंजी के साथ डेटा के टुकड़े को एन्क्रिप्ट करना है और देखें कि क्या आप इसे निजी कुंजी से डिक्रिप्ट कर सकते हैं - या वैकल्पिक रूप से डेटा के टुकड़े पर हस्ताक्षर करने के लिए निजी कुंजी और देखें कि क्या आप इसे सार्वजनिक कुंजी से सत्यापित कर सकते हैं।

कुंजी आरएसए चाबियाँ हैं, तो आप Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters को Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters के लिए सार्वजनिक की और निजी कुंजी डाली और सत्यापित करें कि Modulus एक ही है और सार्वजनिक कुंजी की कि Exponent निजी कुंजी की PublicExponent के बराबर है सकते हैं। क्या तुम सच में फैंसी प्राप्त करना चाहते हैं, तो आप भी निजी कुंजी की सभी शेष मानकों (PKCS#1 खंड 3.2 का पालन करें) को मान्य कर सकते हैं।

+0

महान उत्तर के लिए धन्यवाद! मैं एक्सपोनेंट और मॉड्यूलस मिलान तकनीक का उपयोग कर रहा हूं। –

+0

बीटीडब्ल्यू आपकी पहली वाक्य इतना समझ में नहीं आता है। मुझे जनता के साथ एन्क्रिप्ट करना चाहिए और निजी अधिकार से डिक्रिप्ट करना चाहिए? –

+0

@Evgeni पेट्रोव: हाँ, आप सही हैं। मैंने वाक्य को सही किया है। –

0

मैं कुछ पाठ (निजी कुंजी) एन्क्रिप्ट और कुछ पाठ (सार्वजनिक कुंजी) डिक्रिप्ट करने के लिए कोशिश कर रहा हूँ: यहाँ नमूना कोड है।

सार्वजनिक कुंजी का उपयोग डिक्रिप्शन के लिए नहीं किया जाना है। PKI में, सार्वजनिक कुंजी डेटा यह निजी कुंजी और निजी कुंजी धारकों को भेजने के लिए फिर डेटा प्रस्तुत डिक्रिप्ट करने के लिए प्रयोग किया जाता है का इरादा रखता है एन्क्रिप्ट करने के लिए कई दलों के लिए साझा किया जाता है।

+3

हालांकि निजी कुंजी के साथ हस्ताक्षरित सामग्री के सुरक्षित हैश को एन्क्रिप्ट करके हस्ताक्षर किया जाता है, जिसे जनता के साथ डिक्रिप्ट करके सत्यापित किया जा सकता है। एक नाइट-पिक हालांकि, +1 वही है। –

+0

तो मुझे निजी और सार्वजनिक कुंजी मैच की जांच कैसे करनी चाहिए? –

संबंधित मुद्दे