MD5 128 बिट्स है लेकिन यह 32 अक्षर क्यों है?


95

मैंने md5 के बारे में कुछ डॉक्स पढ़े, इसने कहा कि इसके 128 बिट्स हैं, लेकिन यह 32 अक्षर क्यों है? मैं पात्रों की गणना नहीं कर सकता।

  • 1 बाइट 8 बिट है
  • यदि 1 वर्ण 1 बाइट है
  • फिर 128 बिट्स 128/8 = 16 बाइट्स सही है?

संपादित करें:

SHA-1 160 बिट का उत्पादन करता है, तो कितने वर्ण हैं?


क्या आप आपके द्वारा संदर्भित डॉक्स का लिंक पोस्ट कर सकते हैं?
डॉन रॉबी

@don: क्षमा करें, इसके मेरे व्याख्याता नोट। लेकिन ba__friend ने मेरे प्रश्न का उत्तर दिया है, और मैं इसे यहाँ परीक्षण करता हूं: miraclesalad.com/webtools/md5.php , और इसके वास्तव में हेक्साडेसिमल अक्षर केवल, यह मेरे लिए बहुत अधिक समझ में आता है। मैं उनके उत्तर को सर्वश्रेष्ठ उत्तर के रूप में वोट
करूंगा

मुझे लगता है कि मेरा उत्तर किसी भी अन्य की तुलना में इस पर अधिक विस्तार से जाता है। यदि आप कंप्यूटर प्रोग्रामिंग के लिए नए हैं और यह सवाल पूछ रहे हैं और उत्तर के माध्यम से चाहते हैं
इवान कैरोल

9
यह एक मूर्खतापूर्ण सवाल नहीं है। एक बार आप यह भी नहीं जानते थे कि कितने हेक्स वर्णों ने एक बाइट का प्रतिनिधित्व किया था।
डेविड क्लेम्फनर

हैश की थोड़ी लंबाई की गणना करने के लिए एक त्वरित अजगर एक लाइनर है ((1 << (n*4))-1).bit_length()जहां n हेक्साडेसिमल में हैश की लंबाई है
वुट्रर

जवाबों:


107

हेक्साडेसिमल प्रतिनिधित्व के रूप में 32 वर्ण, प्रति बाइट 2 चार्ट।


1
1 बाइट को दो अंकों के हेक्साडेसिमल संख्या द्वारा दर्शाया जाता है, जैसे 255 = ff।
ba__friend

1
तो 1 बाइट 2 वर्ण है जिसका अर्थ है कि 16 बिट्स 2 वर्ण है तो 128/16 = 8. तो 8 में से 2 वर्ण = 16 वर्ण की आवश्यकता है? 32 क्यों?
कोरे तुगै

15
क्योंकि प्रत्येक हेक्स चरित्र को 4 बिट्स द्वारा दर्शाया जा सकता है। तो अगर यह 128 बिट्स है तो यह 128/4 = 32 हेक्स वर्ण है। हालांकि प्रत्येक "चार" को utf8 या ascii के रूप में एन्कोड किया जाएगा जो कि हेक्स प्रतिनिधित्व आकार 32 * 8/256 बिट्स बना देगा।
गैस्टन सांचेज

2
यह वास्तव में खराब जवाब है। मेरा जवाब इस पर विवरण में जाता है: stackoverflow.com/a/41618070/124486
इवान कैरोल

@KorayTugay "तो 1 बाइट 2 वर्ण है जिसका अर्थ है 16 बिट्स 2 वर्ण है" - 1 बाइट! = 11 बिट्स
डेविड क्लेम्फनर

36

मैं कुछ जवाबों को एक पोस्ट में समराइज करना चाहता था।

सबसे पहले, MD5 हैश को एक वर्ण स्ट्रिंग के रूप में नहीं बल्कि एक हेक्स संख्या के रूप में सोचें। इसलिए, प्रत्येक अंक एक हेक्स अंक (0-15 या 0-एफ) है और चार बिट्स का प्रतिनिधित्व करता है, आठ नहीं।

इसे आगे ले जाते हुए, एक बाइट या आठ बिट्स को दो हेक्स अंकों द्वारा दर्शाया जाता है, जैसे b ' 1111 1111' = 0xFF= 255

MD5 हैश लंबाई में 128 बिट्स हैं और आम तौर पर 32 हेक्स अंकों द्वारा दर्शाए जाते हैं।

SHA-1 हैश लंबाई में 160 बिट्स हैं और आम तौर पर 40 हेक्स अंकों द्वारा दर्शाए जाते हैं।

SHA-2 परिवार के लिए, मुझे लगता है कि हैश की लंबाई एक पूर्व निर्धारित सेट में से एक हो सकती है। तो SHA-512 को 128 हेक्स अंकों द्वारा दर्शाया जा सकता है।

फिर, यह पोस्ट पिछले उत्तरों पर आधारित है।


26

एक हेक्स "चरित्र" (नीच) एक "चरित्र" से अलग है

बिट्स बनाम बाइट, वर्णों पर स्पष्ट होने के लिए।

  • 1 बाइट 8 बिट्स है (हमारे उद्देश्यों के लिए)
  • 8 बिट्स 2**8संभव संयोजन प्रदान करता है: 256 संयोजन

जब आप एक हेक्स चरित्र को देखते हैं,

  • की 16 संयोजन [0-9] + [a-f]: की पूरी श्रृंखला0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 256 से कम है, इसलिए एक हेक्स चरित्र एक बाइट को स्टोर नहीं करता है ।
  • 16 है 2**4: इसका मतलब है कि एक हेक्स चरित्र एक बाइट में 4 बिट्स (आधा बाइट) स्टोर कर सकता है।
  • इसलिए, दो हेक्स वर्ण, 8 बिट्स, 2**8संयोजनों को स्टोर कर सकते हैं ।
  • एक बाइट को एक हेक्स चरित्र के रूप में दर्शाया जाता है [0-9a-f][0-9a-f]और यह बाइट के आधे हिस्से का प्रतिनिधित्व करता है (हम हाफ-बाइट को निब कहते हैं )।

जब आप एक नियमित बाइट चरित्र को देखते हैं, (हम पूरी तरह से मल्टी-बाइट और विस्तृत वर्णों को छोड़ते हैं)

  • यह 16 से अधिक संयोजनों को स्टोर कर सकता है।
  • चरित्र की क्षमताओं को एन्कोडिंग द्वारा निर्धारित किया जाता है उदाहरण के लिए, आईएसओ 8859-1 जो ​​एक पूरी बाइट को स्टोर करता है, इस सभी सामान को स्टोर करता है
  • वह सारा सामान पूरी 2**8रेंज में ले जाता है ।
  • यदि एक हेक्स-चरित्र md5()सभी को स्टोर कर सकता है, तो आप सभी लोअरकेस अक्षर, सभी बड़े अक्षर, सभी विराम चिह्नों और चीजों को पसंद करेंगे ¡°ÀÐàð, जैसे व्हॉट्सएप (newlines, और टैब), और नियंत्रण वर्ण (जिसे आप कर सकते हैं) टी भी देखें और जिनमें से कई उपयोग में नहीं हैं)।

तो वे स्पष्ट रूप से अलग हैं और मुझे उम्मीद है कि मतभेदों को सबसे अच्छा ब्रेक प्रदान करता है।


1
यह वास्तव में "किस क्रम में कल्पना या मंच पर निर्भर है" का क्या अर्थ है? यह देखना अधिक पसंद करेंगे।
कुमार

@ कुमार मैं इसे हटाने जा रहा हूं क्योंकि मुझे नहीं लगता कि यह वास्तव में बातचीत के लिए प्रासंगिक है, और यह बुरी तरह से शब्दबद्ध है।
इवान कैरोल

22

MD5 से हेक्साडेसिमल अंक (0-15 / 0-F) निकलते हैं, इसलिए वे प्रत्येक के चार बिट होते हैं। 128/4 = 32 वर्ण।

SHA-1 से हेक्साडेसिमल अंक (0-15 / 0-F) भी निकलते हैं, इसलिए 160/4 = 40 अक्षर।

(चूंकि वे गणितीय कार्य कर रहे हैं, अधिकांश हैशिंग फ़ंक्शन के आउटपुट को आमतौर पर हेक्स अंकों के रूप में दर्शाया जाता है।)

आप शायद ASCII पाठ पात्रों के बारे में सोच रहे थे, जो 8 बिट्स हैं।


बहुत बहुत धन्यवाद .. मेरे सिर में अभी और भी बहुत कुछ साफ है !!
hash_jr90

नोट: एससीआई-चारसेट में गैर-प्रिंट करने योग्य प्रतीक हैं।
रॉय ली

मैंने इसे थोड़ा और स्पष्ट रूप से stackoverflow.com/a/41618070/124486
इवान कैरोल


2

वे हेक्सिडेसिमल अंक हैं, वर्ण नहीं। एक अंक = 4 बिट्स।



2

एक हेक्स अंक = 1 कुतरना (चार-बिट)

दो हेक्स अंक = 1 बाइट (आठ-बिट)

MD5 = 32 हेक्स अंक

32 हेक्स अंक = 16 बाइट्स (32/2)

16 बाइट्स = 128 बिट्स (16 * 8)

वही SHA-1 पर लागू होता है, सिवाय इसके कि यह 40 हेक्स अंक लंबा है।

आशा है कि ये आपकी मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.