मुझे पूरी तरह से यकीन नहीं है कि मैं समझता हूँ कि आप क्या चाहते हैं, लेकिन मुझे लगता है कि निम्नलिखित की तरह कुछ काम करना चाहिए:
$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
मूल रूप से, मैं हेक्स आउटपुट लेता हूं, sed
इसे बची हुई हेक्स मानों की एक स्ट्रिंग बनाने के लिए उपयोग करता हूं , और फिर echo -en
बाइट्स को गूंजने के लिए उपयोग करता हूंbase64
।
हम पुष्टि कर सकते हैं कि अंतिम आउटपुट निम्न अभ्यास के साथ उसी हैश से मेल खाता है:
$ echo -n "message" | sha1sum
6f9b9af3cd6e8b8a73c2cdced37fe9f59226e27d -
$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
b5ua881ui4pzws3O03/p9ZIm4n0=
$ echo -n "b5ua881ui4pzws3O03/p9ZIm4n0=" | base64 -d | xxd
0000000: 6f9b 9af3 cd6e 8b8a 73c2 cdce d37f e9f5 o....n..s.......
0000010: 9226 e27d .&.}
दृश्य निरीक्षण से पता चलता है कि हमारा बेस 64 मूल्य मूल हेक्स से मेल खाता है। ध्यान दें कि अगर आप का उपयोग hexdump
करने के बजाय xxd
आप उत्पादन आप उम्मीद कर पाने के लिए प्रारूप सेटिंग्स के साथ एक सा खेलने के लिए हो सकता है।
echo foo | openssl dgst -binary -sha1 | base64
बराबर है, और शायद ऐसा करने का सबसे साफ तरीका है।