2011-04-17 12 views
97

एक पायथन एमडी 5 हैश शेल पर md5sum कमांड द्वारा बनाए गए एक से अलग है। क्यूं कर?पायथन द्वारा बनाए गए एमडी 5 हैश को शैल में इको और एमडी 5 एसयूएम का उपयोग करके बनाया गया है?

>>> import hashlib 
>>> h = hashlib.md5() 
>>> h.update("mystringforhash") 
>>> print h.hexdigest() 
86b6423cb6d211734fc7d81bbc5e11d3 # Result from Python 


$ echo mystringforhash | md5sum 
686687dd68c5de717b34569dbfb8d3c3 - # Result on the shell 

उत्तर

183

echo एक \n संलग्न कर देता है के बाद से आप आमतौर पर लाइनों अपने खोल में एक LINEBREAK के साथ समाप्त नहीं (यह वास्तव में बदसूरत लग रहा है अगर प्रॉम्प्ट पर बहुत छोड़ दिया शुरू नहीं करता है) नहीं करना चाहती।
अनुगामी LINEBREAK छोड़ -n तर्क का प्रयोग करें और इसे अपने अजगर स्क्रिप्ट को एक ही चेकसम प्रिंट होगा:

> echo -n mystringforhash | md5sum 
86b6423cb6d211734fc7d81bbc5e11d3 - 
+50

असल में इस बड़े उदाहरण का उपयोग मैं जब मैं लोगों को बता अधिक अजगर या higer स्तर का उपयोग करने में से एक है काम के लिए खोल स्क्रिप्ट के बजाय भाषाएं जिन्हें आमतौर पर शैल स्क्रिप्ट में बेहतर तरीके से सोचा जाता है। मिश्रित डेटा और कोड की प्रकृति, और प्रत्येक कमांड के लिए एक अलग वाक्यविन्यास सभी शैल स्क्रिप्ट को अदृश्य त्रुटि प्रवण – jsbueno

+6

बनाते हैं यदि केवल एक चीज "एक खोल" है तो आप 'echo' पर काम करने योग्य' -n' ध्वज पर भरोसा नहीं कर सकते हैं। POSIX का कहना है 'echo' के बारे में निम्नलिखित: "यदि पहला ऑपरेंड' -n' है, या यदि किसी भी ऑपरेटरों में '' वर्ण होता है, तो परिणाम कार्यान्वयन-परिभाषित होते हैं।" (स्रोत: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)। इसके बजाय 'printf' का प्रयोग करें। –

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

  • कोई संबंधित समस्या नहीं^_^