2010-08-10 14 views
17

मैं मूल रूप से php में एक एपीआई बना रहा हूं, और पैरामीटर में से एक यह स्वीकार करेगा कि यह एक एमडी 5 एन्क्रिप्टेड मान है। मुझे विभिन्न प्रोग्रामिंग भाषाओं और एमडी 5 के बारे में ज्यादा जानकारी नहीं है। तो मेरा मूल सवाल यह है कि, यदि मैं एमडी 5 एन्क्रिप्टेड मानों को स्वीकार कर रहा हूं, तो वैल्यू वही रहेगी, जो किसी भी प्रोग्रामिंग भाषा जैसे .NET, Java, Perl, Ruby ... से उत्पन्न होती है।क्या एमडी 5 क्रिप्टोग्राफिक हैश फ़ंक्शन आउटपुट सभी प्रोग्रामिंग भाषाओं में समान होगा?

या कुछ सीमा होगी या इसके लिए सत्यापन।

+8

आपको SHA512 का उपयोग करना चाहिए। – SLaks

+5

आप एक md5 हैश का उपयोग एन्क्रिप्टेड मान नहीं कर रहे हैं। एन्क्रिप्शन और हैशिंग एक ही चीज़ नहीं हैं। – Chris

+1

@Chris जबकि विधि की योग्यता बहस योग्य है, आप 1 रास्ता एन्क्रिप्शन के लिए हैशिंग एल्गोरिदम का उपयोग कर सकते हैं। – corsiKa

उत्तर

25

हां, एमडी 5 का सही कार्यान्वयन एक ही परिणाम देगा, अन्यथा एमडी 5 चेकसम के रूप में उपयोगी नहीं होगा। अंतर एन्कोडिंग और byte order के साथ आ सकता है। आपको यह सुनिश्चित करना होगा कि पाठ को पर बाइट्स के समान अनुक्रम में एन्कोड किया गया हो।

+7

यह उल्लेख किया जाना चाहिए कि चीजों को * बिल्कुल * एक ही बाइट्स प्राप्त करना एक गैर-मामूली समस्या है।टेक्स्ट एन्कोडिंग, बाइट ऑर्डर, सूची जारी है। –

+3

लाइन लाइनिंग भी - मुझे एक बार वास्तव में कष्टप्रद बग था जहां एमडी 5 एसएमएस कई प्रणालियों में मेल नहीं खा रहे थे, और यह पता चला कि कुछ सिस्टम इनपुट टेक्स्ट से पिछली नई लाइन को हटा रहे थे, और अन्य नहीं थे। – Ether

+1

आपका उत्तर घोड़े से पहले गाड़ी का तात्पर्य है। एमडी 5 आपको यह गारंटी देने का एक तरीका देता है कि आपको सटीक बाइट्स मिलते हैं। ट्रैविस सही है कि एक गैर-मामूली समस्या है। यही कारण है कि ये चेकसम मौजूद हैं, यह सुनिश्चित करना है कि आपको सटीक बाइट्स मिल जाए। – corsiKa

5

हां। एमडी 5 एन्क्रिप्शन फ़ंक्शन नहीं है, यह hash function है जो एक विशिष्ट एल्गोरिदम का उपयोग करता है।

3

हां, एमडी 5 हैश हमेशा उनके मूल के बावजूद समान होंगे - जब तक अंतर्निहित एल्गोरिदम सही ढंग से कार्यान्वित किया जाता है।

3

एमडी 5 जैसे सुरक्षित हैश फ़ंक्शंस का एक महत्वपूर्ण बिंदु यह है कि वे हमेशा एक ही इनपुट के लिए समान मूल्य उत्पन्न करते हैं।

हालांकि, आपको इनपुट डेटा को बाइट्स (या बिट्स) के अनुक्रम में एन्कोड करने की आवश्यकता होती है। उदाहरण के लिए, स्ट्रिंग को एन्कोड करने के कई तरीके हैं।

14

यह होगा, लेकिन है लेकिन है।

ऐसा इसलिए होगा क्योंकि बाइट्स की दोहराई गई श्रृंखला को देखते हुए यह वही परिणाम विश्वसनीय रूप से उत्पन्न करने के लिए spec'd है - बिंदु यह है कि हम तब परिणामों की तुलना कर सकते हैं ताकि बाइट्स को नहीं बदला जा सके, या शायद केवल एमडी 5 पर डिजिटल हस्ताक्षर करें पूरे स्रोत पर हस्ताक्षर करने के बजाय परिणाम।

लेकिन यह है कि बग का एक आम स्रोत इस बारे में धारणा बना रहा है कि तारों को कैसे एन्कोड किया गया है। एमडी 5 बाइट्स पर काम करता है, वर्ण नहीं, इसलिए यदि हम एक स्ट्रिंग हैशिंग कर रहे हैं, तो हम वास्तव में उस स्ट्रिंग के एक विशेष एन्कोडिंग को हश कर रहे हैं। कुछ भाषाएं (और अधिक, कुछ रनटाइम) विशेष एन्कोडिंग का पक्ष लेती हैं, और कुछ प्रोग्रामर का उपयोग उस एन्कोडिंग के बारे में धारणा करने के लिए किया जाता है। इससे भी बदतर, कुछ specs एन्कोडिंग के बारे में धारणा कर सकते हैं। यह बग का कारण हो सकता है जहां दो अलग-अलग कार्यान्वयन एक ही स्ट्रिंग के लिए अलग-अलग MD5 हैंश उत्पन्न करेंगे। यह विशेष रूप से ऐसे मामलों में है जहां पात्र यू +0020 से यू +007 एफ के बाहर हैं (और चूंकि यू +007 एफ एक नियंत्रण है, इसलिए किसी के पास अपने स्वयं के मुद्दे हैं)।

यह सब अन्य क्रिप्टोग्राफिक हैंश, जैसे कि SHA- परिवार के हैंश पर लागू होता है।

+0

समझाए जाने के लिए धन्यवाद, और जैसा कि मैंने आपके बिंदु से समझ लिया है, जहां तक ​​स्ट्रिंग्स का एन्कोडिंग समान है, यह प्रोग्रामिंग भाषा के बावजूद एक ही एमडी 5 हैश का उत्पादन करेगा। धन्यवाद – jtanmay

+0

हाँ, और नई लाइन भी वही होनी चाहिए। एमडी 5 बाइट्स के एक ही सेट के साथ सही परिणाम की गारंटी देता है, यह उसमें दाएं बाइट्स को खिलाने में नहीं है जिसमें बग आते हैं। –

+0

इसे मजेदार बनाने के लिए, कुछ प्रोग्रामिंग भाषाएं बाइट ऑर्डर मार्क जोड़ सकती हैं जब टेक्स्ट यूनिकोड एन्कोडिंग योजनाओं में से किसी एक का उपयोग करके एन्कोड किया जाता है। मैंने यूटीएफ -8 बीओएम को जंगली में भी इस्तेमाल किया है। जाहिर है, इसके परिणामस्वरूप विभिन्न एमडी 5 हैंश होंगे। इसके अलावा, कुछ कार्यान्वयन हैश के * एन्कोडेड * संस्करण को आउटपुट करेंगे, उदा। PHP डिफ़ॉल्ट रूप से 16 बाइट्स की बजाय 32 अंकों की हेक्साडेसिमल स्ट्रिंग का आनंद उठाएगा। –

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