2009-07-06 19 views
5

में एक कुंजी दी गई है, मैं सी # में एक दिए गए स्ट्रिंग को हैश करने का एक तरीका ढूंढ रहा हूं जो पूर्व निर्धारित कुंजी का उपयोग करता है।एमडी 5 हैशिंग सी #

इंटरनेट के माध्यम से मेरे रोमांच पर एक उदाहरण खोजने की कोशिश कर रहा है मैंने कई MD5CryptoServiceProvider उदाहरण देखे हैं जो मशीन के लिए एक डिफ़ॉल्ट कुंजी का उपयोग करने लगते हैं, लेकिन उनमें से कोई भी एक विशिष्ट कुंजी लागू नहीं करता है। मुझे किसी और के सर्वर पर सिंक्रनाइज़ करने के लिए डेटा एन्कोड करने के लिए एक विशिष्ट कुंजी होना चाहिए। मैं उन्हें एक हैश स्ट्रिंग और एक आईडी नंबर सौंपता हूं और वे डेटा का विश्लेषण करते हैं और मुझे एक समान सेट वापस करते हैं। तो क्या एमडी 5 को एक विशिष्ट कुंजी के माध्यम से हैश प्राप्त करने के लिए वैसे भी है जो दोनों के अनुरूप होगा।

मैं इसे सी # में किया जाना पसंद करूंगा, लेकिन यदि पुस्तकालयों के साथ यह संभव नहीं है तो आप कुछ वेब भाषाओं जैसे php या asp के साथ ऐसा कर सकते हैं?

संपादित करें: उस परिदृश्य को गलत समझा गया जिसमें मुझे फेंक दिया गया था और थोड़ी देर के बाद और सोच रहा था कि वे मुझे एक कुंजी का उपयोग क्यों करेंगे, ऐसा लगता है कि वे स्ट्रिंग के अंत में एक कुंजी जोड़ना चाहते हैं और धोया है। इस तरह से सर्वर अपने वैध कंप्यूटर को सुनिश्चित करने के लिए पारित डेटा के साथ कुंजी को जोड़ सकता है। वैसे भी ... सभी को धन्यवाद^_^

संपादित 2: जैसा कि मेरी टिप्पणी नीचे कहती है, यह शब्द 'नमकीन' था जिसे मैं अनजान था। ओह कुछ दिशाओं के साथ कुछ नया में फेंकने की खुशी।

+1

MD5 के लिए कोई कुंजी ... नहीं है के रूप में टॉम रिटर ने बताया, यह ** नहीं ** एक एन्क्रिप्शन एल्गोरिथ्म –

+0

हर किसी ने कहा है के रूप में MD5 hashing है, नहीं एन्क्रिप्शन, लेकिन यह अपने पद से स्पष्ट नहीं है अगर आप वास्तव में * करते हैं * हैशिंग और मिस्पाक चाहते हैं या वास्तव में एन्क्रिप्शन चाहते हैं। कृपया स्पष्ट करें। – annakata

+0

आपके संपादन ने वास्तव में आपके प्रश्न को स्पष्ट नहीं किया है। एमडी 5 कोई "पूर्वनिर्धारित कुंजी" का उपयोग नहीं करता है जिसके बारे में आप पूछ रहे हैं। हालांकि, अगर आपको केवल इतना करना है कि हैश की तुलना करें तो बस अपने दो इनपुट के हैश लें और परिणाम बिट-बिट-बिट की तुलना करें। ध्यान दें कि एमडी 5 आमतौर पर हैश टक्कर के बहुत ही असंभव मामले को छोड़कर) पूरी तरह से अलग-अलग परिणाम देगा, भले ही इनपुट छोटी राशि से भिन्न हो। – Naaff

उत्तर

17

MD5 एन्क्रिप्शन नहीं है - यह एक हैश है। यह स्ट्रिंग को डिक्रिप्ट करने की अनुमति नहीं देता है।

आप एक सममित एन्क्रिप्शन एल्गोरिदम खोज रहे हैं। यह एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग करता है। एन्क्रिप्शन फ़ंक्शंस without understanding them is dangerous का उपयोग करने का प्रयास कर रहा है। भले ही आपको लगता है कि आप उन्हें समझते हैं, आप एक गलती कर सकते हैं।

आप किसी अन्य व्यक्ति के सर्वर से डेटा ट्रांसफर कर रहे हैं, तो आप बेहतर होगा कि आप दोनों फोन पर पर सहमत हैं एक सममित कुंजी, या शायद कुछ सार्वजनिक कुंजी क्रिप्टो का उपयोग कर फ़ाइल को एन्क्रिप्ट करने gpg की तरह कुछ का उपयोग कर सकते हैं। इस तरह, आप कोई क्रिप्टो कोड नहीं लिखते हैं, और यह सुरक्षित है (पूरी तरह सुरक्षित नहीं है, आपको याद है, लेकिन सुरक्षित है)।


संपादित करें: मैं अभी भी अपनी आवश्यकताओं को समझने के लिए कोशिश कर रहा हूँ।

एमडी 5 एक बेकार हैश फ़ंक्शन है - बिल्कुल उपयोग में महत्वपूर्ण नहीं है। तो मान लें कि सर्वर आपको एक विशाल स्ट्रिंग, या एक फ़ाइल, और इसके एक हैश भेजता है। फिर आप स्ट्रिंग या फ़ाइल MD5 करेंगे, और आपके द्वारा भेजे गए हैश के साथ गणना की गई हैश की तुलना करें। यदि वे मेल खाते हैं - डेटा ट्रांजिट में दूषित नहीं था। का मतलब यह नहीं है कि उन्होंने आपको पारगमन में जो कुछ भेजा है, उससे कोई छेड़छाड़ नहीं हुई है, क्योंकि एमडी 5 के पास कोई "गुप्त सॉस" नहीं है। मैं चाहता हूं कि मैं कुछ भी एमडी 5 कर सकता हूं और आपको भेज सकता हूं।

एक एचएमएसी कीड हैश फ़ंक्शन है। इसमें एक गुप्त घटक है कि केवल आप और जिस समूह के साथ आप संचार कर रहे हैं उसे पता होना चाहिए - गुप्त कुंजी। यदि वे आपको एक लंबी स्ट्रिंग या फ़ाइल भेजते हैं, और एक एचएमएसी, तो आप एचएमएसी की गणना कर सकते हैं, अपने एचएमएसी और उनके साथ तुलना कर सकते हैं, और यदि वे मेल खाते हैं, डेटा पारगमन में दूषित नहीं हुआ था, न ही डेटा के साथ छेड़छाड़ किया गया था।

+0

+1। – ojrac

2

MD5 एक हैश फ़ंक्शन है और सख्ती से बोलना, स्ट्रिंग को "एन्क्रिप्ट" करने के लिए उपयोग नहीं किया जाता है। यह एक 128-बिट "संदेश डाइजेस्ट" (इसलिए नाम में एमडी) का उत्पादन करता है जिसे इनपुट स्ट्रिंग के लिए फिंगरप्रिंट के प्रकार के रूप में उपयोग किया जाता है।

0

टॉम का अधिकार: एमडी 5 सिर्फ एक ही रास्ता हैश है, आप इसे डिक्रिप्ट नहीं कर सकते हैं। इन कड़ियों का प्रयास करें:

0

आप एन्क्रिप्शन के प्रकार आप के लिए देख रहे हैं करने के लिए सी # से एईएस का उपयोग कर सकते हैं। कैसे an article पर है।

0

आप उदाहरण के लिए, SymmetricAlgorithm से विरासत में मिली वर्गों में से एक का उपयोग करना चाहिए:

  • AesCryptoServiceProvider
  • DESCryptoServiceProvider
  • RC2CryptoServiceProvider
  • TripleDESCryptoServiceProvider
0

तो, क्यों करता है निम्न परीक्षण असफल हो तो दोनों इनपुट स्ट्रिंग समान हैं?

[TestMethod] 
    public void MD5HashTest() 
    { 
     var hash1 = (new MD5CryptoServiceProvider()).ComputeHash(new System.Text.ASCIIEncoding().GetBytes("now is the time for all good men.")); 
     var hash2 = (new MD5CryptoServiceProvider()).ComputeHash(new System.Text.ASCIIEncoding().GetBytes("now is the time for all good men.")); 

     Assert.AreEqual(hash1, hash2); 
    } 
+0

ऐसा इसलिए है क्योंकि Assert.AreEqual संदर्भ समानता की जांच कर रहा है: हैश 1 और हैश 2 अलग-अलग ऑब्जेक्ट्स हैं, इसलिए आपका परीक्षण विफल हो जाता है। यदि आप हैश 1 और हैश 2 की सामग्री देखते हैं, तो आप देखेंगे कि उनमें बाइट्स का सटीक सेट शामिल है। –

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