2012-06-06 7 views
30

निम्नलिखित पर विचार करें:प्रतीत होता है कि खाली फाइलें और स्ट्रिंग्स md5sums क्यों उत्पन्न करती हैं?

सभी की
% md5sum /dev/null 
d41d8cd98f00b204e9800998ecf8427e /dev/null 
% touch empty; md5sum empty 
d41d8cd98f00b204e9800998ecf8427e empty 
% echo '' | md5sum 
68b329da9893e34099c7d8ad5cb9c940 - 
% perl -e 'print chr(0)' | md5sum 
93b885adfe0da089cdf634904fd59f71 - 
% md5sum '' 
md5sum: : No such file or directory 

पहले, मैं इन सभी आदेशों के उत्पादन से हैरान हूँ। यदि कुछ भी हो, तो मैं उम्मीद करता हूं कि राशि उन सभी के लिए समान होगी।

उत्तर

64

"कुछ नहीं" (वर्णों की शून्य-लंबाई धारा) का md5sum d41d8cd98f00b204e9800998ecf8427e है, जिसे आप अपने पहले दो उदाहरणों में देख रहे हैं।

तीसरे और चौथे उदाहरण एक ही चरित्र को संसाधित कर रहे हैं। "गूंज" मामले में, यह पर्ल उदाहरण में एक नई पंक्ति है, यानी

$ echo -ne '\n' | md5sum 
68b329da9893e34099c7d8ad5cb9c940 - 

, यह मूल्य 0x00 के साथ एक एकल बाइट है, यानी

$ echo -ne '\x00' | md5sum 
93b885adfe0da089cdf634904fd59f71 - 

आप का उपयोग "गूंज" खाली चेकसम पुन: पेश कर सकते हैं इस प्रकार है:

$ echo -n '' | md5sum 
d41d8cd98f00b204e9800998ecf8427e - 

... और पर्ल का उपयोग कर इस प्रकार है:

$ perl -e 'print ""' | md5sum 
d41d8cd98f00b204e9800998ecf8427e - 

सभी चार मामलों में, आपको एक ही आउटपुट को उसी डेटा की जांच करने की अपेक्षा करनी चाहिए, लेकिन अलग-अलग डेटा को जंगली रूप से अलग चेकसम उत्पन्न करना चाहिए (यह पूरी बात है - भले ही यह केवल एक ही वर्ण है जो अलग हो।)

+1

... या 'perl -e '' – minmaxavg

2

आश्चर्य की कोई ज़रूरत नहीं है। पहले दो एमडी 5 एसयूएम में वास्तविक खाली इनपुट का उत्पादन करते हैं। गूंज एक नई लाइन बनाता है (echo -n '' एक खाली आउटपुट का उत्पादन करना चाहिए; मेरे पास जांचने के लिए लिनक्स मशीन नहीं है)। पर्ल एक शून्य बाइट उत्पन्न करता है (सी के साथ भ्रमित नहीं होना चाहिए जहां शून्य बाइट स्ट्रिंग के अंत होते हैं)। अंतिम आदेश रिक्त स्ट्रिंग वाले फ़ाइल को फ़ाइल नाम के रूप में ढूंढ रहा है।

6

प्रतीत होता है कि खाली फाइलें और स्ट्रिंग्स md5sums क्यों उत्पन्न करती हैं?

क्योंकि "राशि" md5sum में कुछ भ्रामक है। यह उदास की तरह नहीं है सीआरसी 32 चेकसम, जो खाली फ़ाइल के लिए शून्य है।

MD5 संदेश डाइजेस्ट एल्गोरिदम में से एक है। आप इसे एक बॉक्स के रूप में कल्पना कर सकते हैं जो इसकी आंतरिक स्थिति के आधार पर निश्चित-लंबाई यादृच्छिक दिखने वाला मूल्य (हैश) उत्पन्न करता है। आप डेटा में भोजन करके आंतरिक स्थिति बदलते हैं।

और वह बॉक्स आंतरिक स्थिति पूर्वनिर्धारित है, जैसे कि यह किसी भी डेटा को खिलाए जाने से पहले यादृच्छिक रूप से दिखने वाले हैश मान उत्पन्न करता है। एमडी 5 के लिए, यह d41d8cd98f00b204e9800998ecf8427e होता है।

+0

थोड़ा और सटीक होने के लिए: MD5 आंतरिक रूप से संदेश के अंत में एक पैडिंग ब्लॉक जोड़ देगा। इस प्रकार, हैश मान इस पैडिंग ब्लॉक पर हैश फ़ंक्शन को क्रंच करने का परिणाम है, न कि प्रारंभिक स्थिति। – nneonneo

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