मैं Ubuntu 11.10 पर OpenSSL 1.0.0e के तहत इस व्यवहार का निरीक्षण करता हूं, जबकि OpenSSL 0.9.8k और 0.9.8t आउटपुट सिर्फ हैश। ओपनएसएसएल की कमांड लाइन लचीली होने के लिए नहीं बनाई गई है, यह कमांड लाइन से क्रिप्टोग्राफिक गणना करने के लिए एक त्वरित और गंदे तरीके से अधिक है।
यदि आप ओपनएसएसएल का उपयोग करना चाहते हैं, तो आउटपुट को फ़िल्टर करें:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
लिनक्स (जीएनयू टूल्स या बिजीबॉक्स के साथ) पर, आप उपयोग कर सकते हैं sha1sum
, जिसे ओपनएसएसएल को स्थापित करने की आवश्यकता नहीं है और इसमें एक स्थिर आउटपुट प्रारूप है। यह हमेशा एक फ़ाइल नाम प्रिंट करता है, इसलिए इसे बंद कर दें।
echo -n "foo" | sha1sum | sed 's/ .*//'
OSD सहित BSD सिस्टम पर, आप उपयोग कर सकते हैं sha1
।
echo -n "foo" | sha1 -q
इन सभी का उत्पादन हेक्साडेसिमल में चेकसम के बाद एक नई रेखा से होता है। यूनिक्स सिस्टम के तहत पाठ में हमेशा लाइनों का एक क्रम होता है, और प्रत्येक पंक्ति एक नई लाइन वर्ण के साथ समाप्त होती है। यदि आप शेल चर में कमांड के आउटपुट को स्टोर करते हैं, तो अंतिम न्यूलाइन को बंद कर दिया जाता है।
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
यदि आपको एक ऐसे प्रोग्राम में इनपुट को पाइप करने की आवश्यकता है जिसमें कोई अंतिम न्यूलाइन (जो वास्तव में दुर्लभ है) के साथ एक चेकसम की आवश्यकता होती है, तो न्यूलाइन को बंद कर दें।
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program