मैं cli पर एक base64 एन्कोडेड shaX कैसे प्राप्त कर सकता हूं?


32

sha1sumवास्तविक शा के हेक्स एन्कोडेड प्रारूप को आउटपुट करता है। मैं एक बेस 64 एनकोडेड वेरिएंट देखना चाहूंगा। संभवतः कुछ कमांड जो बाइनरी संस्करण को आउटपुट करता है जिसे मैं पाइप कर सकता हूं, जैसे: echo -n "message" | <some command> | base64या यदि यह इसे सीधे आउटपुट करता है तो यह भी ठीक है।

जवाबों:


41

यदि आपके पास ओपनएसएसएल से कमांड लाइन उपयोगिता है , तो यह द्विआधारी रूप में एक पाचन का उत्पादन कर सकता है, और यह बेस 64 (एक अलग आह्वान में) में भी अनुवाद कर सकता है।

echo -n foo | openssl dgst -binary -sha1 | openssl base64

1
echo foo | openssl dgst -binary -sha1 | base64बराबर है, और शायद ऐसा करने का सबसे साफ तरीका है।
एक्सनोटेरासाइड

3
opensslबेस 64 के लिए उपयोग करने के साथ ही केवल एक टूल ( ksh: base64: not found) पर निर्भर होने का लाभ है ।
गिल्स एसओ- 19

2
बड़े संदेश डाइजेस्ट हैश जैसे sha512, आप परिणामी स्ट्रिंग को कई लाइनों में विभाजित करने से रोकने के -Aलिए अंतिम openssl base64कमांड में विकल्प जोड़ना चाह सकते हैं ।
mykhal

@ गिल्स echo foo > somefile; cat somefile | openssl dgst -binary -sha1 | openssl base64एक अलग स्ट्रिंग क्यों पैदा करता है?
जियोर्जियोलाटोस

@ गलियोटोस क्योंकि echo -n fooऔर echo fooविभिन्न तारों का उत्पादन।
गिल्स एसओ- बुराई को रोकना '

16

चूंकि sha1sumबाइनरी आउटपुट के लिए कोई विकल्प प्रदान नहीं करता है, इसलिए संभवतः आपको एक उपयोगिता खोजने की आवश्यकता होगी जो इसके विपरीत odऔर पाइप करती है। xxd'उल्टा' और 'सादे डंप' झंडे के साथ उपयोग करने के लिए fschmitt द्वारा सुझाव लेना यह इस तरह दिखेगा:

sha1sum | cut -f1 -d\ | xxd -r -p | base64


4
-Rp झंडे के साथ xxd का उपयोग करें। इस तरह: sha1sum somefile.txt | cut -f1 -d \ | xxd -r -p | base64
fschmitt

@fschmitt: मुझे अपना उत्तर पोस्ट करने से पहले इस टिप्पणी को पढ़ना चाहिए, यह बहुत अधिक क्लीनर है। आपको इसे उत्तर के रूप में पोस्ट करने पर विचार करना चाहिए। मैं इसे वोट करूंगा।
स्टीवन डी

यह और अधिक एलेक्स उत्तर है, मैं सिर्फ "कन्वर्ट हेक्स बाइनरी यूनिक्स", इसलिए एलेक्स, xxd कॉल को शामिल करने के लिए अपने उत्तर को संपादित करने के लिए स्वतंत्र महसूस करता हूं और हम इसे वोट करेंगे।
fschmitt

मेरे उत्तर का संपादन किया। इशारा xxdकरने के लिए धन्यवाद :)
एलेक्स

बहुत बढ़िया! यह दस्तावेज़ीकरण httpd.apache.org/docs/2.4/misc/password_encryptions.html से पता लगाना कठिन था, जो इस कदम की आवश्यकता का उल्लेख नहीं करते हैं
phil294

1

मुझे पूरी तरह से यकीन नहीं है कि मैं समझता हूँ कि आप क्या चाहते हैं, लेकिन मुझे लगता है कि निम्नलिखित की तरह कुछ काम करना चाहिए:

$ 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आप उत्पादन आप उम्मीद कर पाने के लिए प्रारूप सेटिंग्स के साथ एक सा खेलने के लिए हो सकता है।


1

पर्ल का बेस 64 मॉड्यूल है (5.7.1 से बेस डिस्ट्रीब्यूशन में)।

echo foo | sha1sum | \
perl -MMIME::Base64 -ne '/^([[:xdigit:]]+)/ and print encode_base64(pack("H*",$1))'

यदि आपके पास Digest::SHAमॉड्यूल है (5.9.3 के बाद से बेस वितरण में), या पुराने Digest::SHA1मॉड्यूल, तो आप संपूर्ण गणना पर्ल में कर सकते हैं। पर्ल 5.10.1 के अनुसार, b64digestबेस 64 आउटपुट को पैड नहीं करता है; यदि आपको सबसे आसान तरीका पैडिंग की आवश्यकता है तो इसका उपयोग करें MIME::Base64

perl -MDigest::SHA -e 'print Digest::SHA->new(1)->addfile(*STDIN)->b64digest'
perl -MMIME::Base64 -MDigest::SHA \
     -le 'print encode_base64(Digest::SHA->new(1)->addfile(*STDIN)->digest)'

अच्छी तरह से अगर हम पर्ल का उपयोग कर रहे हैं, तो हम बस डाइजेस्ट :: एसएचए मॉड्यूल का उपयोग कर सकते हैं जो हमें बेस 64 पर सीधे आउटपुट करने की अनुमति देगा।
xenoterracide

0

बेस 64 एनकोडेड SHA256 हैश हाल ही में ओपनबीएसडी में मानक फ़ाइल चेकसम बन गया है । यह -bओपनबीएसडी के sha256(या sha1, sha512) कमांड के विकल्प को जोड़ने के साथ किया जा सकता है :

$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

या:

$ cksum -q -a sha256b $FILE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.