2010-07-02 17 views
7

मैं काफी कारण है कि मैं PHP में और OpenSSL में md5 हैशिंग के लिए अलग-अलग परिणाम देख रहा हूँ के रूप में उलझन में हूँ। 900150983cd24fb0d6963f7d28e17f72ओपनएसएसएल के एमडी 5 से PHP का एमडी 5 अलग क्यों है?

इस जबकि: में

php -r "echo md5('abc');" 

परिणाम: 0bee89b07a248e27c83fc3d5951213c1

क्यों: में

echo abc | openssl md5 

परिणाम

यहाँ कोड है कि मैं चला रहा हूँ है?

+0

Fwiw, आप अच्छी कंपनी इस गलती कर रहे हैं। इस सवाल को स्टैक ओवरफ़्लो पर कई बार पूछा गया है, उदाहरण के लिए: - http://stackoverflow.com/questions/1147875/difference-in-sha512-between-python-hashlib-and-sha512sum-tool - http: // stackoverflow.com/questions/1604892/is-the-md5sum-linux-command-working-right - http://stackoverflow.com/questions/1843383/why-does-perl-and-bin-sha1-give- अलग -results - http://stackoverflow.com/questions/2799815/why-is-the-same-input-returning-two- अलग- md5-hashes –

+0

अच्छी तरह से मुझे थोड़ा बेहतर महसूस करता है :) thnx :) –

उत्तर

21

MD5 की गणना करने का केवल एक ही तरीका है।

एक अंधेरा अनुमान यह है कि दूसरे में स्ट्रिंग के अंदर एक नई लाइन भी शामिल है।

ये, सत्यापित है। बस।

+5

यह अजीब है, लेकिन 'echo' एक नई लाइन देता है। 'Echo -n abc | का प्रयोग करें PHP संस्करण के समान आउटपुट प्राप्त करने के लिए openssl md5'। – artlung

6

echo आमतौर पर आउटपुट की स्ट्रिंग के अंत में एक नया रेखा वर्ण जोड़ता है; यही कारण है कि एमडी 5 मान अलग हैं।

echo -n abc | openssl md5 के साथ प्रयास करें।

1

रूप jdehaan नोट, आपको बताती हैं कि नहीं उत्पादन एक नई पंक्ति गूंज, आपको जवाब मिल आप

echo -n "abc" | openssl md5 
900150983cd24fb0d6963f7d28e17f72 
8

उम्मीद हर किसी के रूप में बताया गया है, समस्या यह है कि गूंज प्रिंट एक अतिरिक्त न्यू लाइन।

हालांकि, प्रस्तावित समाधान (echo -n) पूरी तरह से सही नहीं है। POSIX मानक के अनुसार, "Implementations shall not support any options." आप दुनिया एक सा बेहतर है अगर आप इसे इस्तेमाल नहीं करते बना देंगे। उपयोग

printf %s abc | openssl md5 

या बस

printf abc | openssl md5 
+1

POSIX मानक भी कहता है * यदि पहला ऑपरेंड '-n' है, या यदि किसी भी ऑपरेंड में बैकस्लैश (' '\' ') वर्ण होता है, तो परिणाम कार्यान्वयन-परिभाषित होते हैं। * (उसी पृष्ठ को और नीचे) - यह एक्सएसआई एक्सटेंशन है जो कहता है कि -एन को सामान्य स्ट्रिंग के रूप में संभाला जाना चाहिए (और यदि सिस्टम एक्सएसआई-अनुरूप है, तो आप इसके बजाय 'echo "abc \ c" 'का उपयोग कर सकते हैं) – caf

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