मैं कमांड लाइन से एक बेस 64 स्ट्रिंग को कैसे डीकोड कर सकता हूं?


426

मैं बेस 64 स्ट्रिंग को डीकोड करने के लिए बैश स्क्रिप्ट लिखना चाहूंगा। उदाहरण के लिए मैं टाइप करता हूं decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==और यह प्रिंट करता है Aladdin:open sesameऔर प्रॉम्प्ट पर लौटता है।

अब तक मैंने एक साधारण बैश फाइल रखने की कोशिश की है, python -m base64 -d $1लेकिन यह कमांड एक फ़ाइलनाम को एक स्ट्रिंग नहीं होने की उम्मीद करता है। क्या कोई अन्य गैर-संवादात्मक कमांड (जरूरी नहीं कि पायथन मॉड्यूल में है) जो कि मैं इसे प्राप्त करने के लिए कमांड लाइन से चला सकता हूं, बिना किसी अतिरिक्त पैकेज को स्थापित करने के? (या अगर मैं करता हूं, तो कुछ अति-न्यूनतम।)

जवाबों:


630

बस पैकेज base64से प्रोग्राम का उपयोग करें coreutils:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

या, न्यूलाइन वर्ण को शामिल करने के लिए

echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`

आउटपुट (न्यूलाइन शामिल है):

Aladdin:open sesame

10
या: गूंज QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode && प्रतिध्वनि
ग्रेग चबाला

61
या:base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ==
जूल

4
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txtविंडोज पर गिट के बेस 64 के साथ।
फायर

3
@January ऐसा नहीं है Just use, क्योंकि बहुत से लोगों के बारे में पता base64कार्यक्रम - लेकिन एक नहीं कर सकते हैं के रूप में सिर्फ कमांड लाइन विकल्प के रूप में एक स्ट्रिंग डालें, यह जो एक समय में केवल एक बार CLI स्पर्श उपयोगकर्ताओं के लिए वाक्य रचना सही पाने के लिए कठिन है।
तक्षशिला

12
मैक पर, एन्कोडेड स्ट्रिंग को क्लिपबोर्ड में कॉपी करें और चलाएं pbpaste | base64 --decode
मारीआन Marierný

95

Opensl, बेस 64 को एनकोड और डीकोड कर सकता है

$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!

संपादित करें: एक उदाहरण जहां बेस 64 एन्कोडेड स्ट्रिंग कई लाइनों पर समाप्त होता है:

$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'
QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
$ openssl enc -base64 -d << EOF
> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
> EOF
And if the data is a bit longer, the base64 encoded data will span multiple lines.

8
फिलिप के जवाब के लिए धन्यवाद, आप लंबे समय बेस 64 स्ट्रिंग्स के लिए -एक जोड़ने अन्यथा openssl कुछ भी नहीं वापस आ जाएगी, देखने की जरूरत askubuntu.com/a/271676/305568
morloch

@ मॉर्लोच या बस base64 एनकोडेड डेटा से नई लाइनों को हटाने से बचें, और यह उम्मीद के
मुताबिक

1
मैं विचार नहीं होता coreutilsजैसे कार्यक्रमों से युक्त एक "अतिरिक्त" पैकेज ls, mkdir, cp, mv, और chmod। मुझे संदेह है कि आप इसके बिना अपनी मशीन के साथ कुछ भी उपयोगी कर सकते हैं।
vidstige

@vidstige, यह सच है। मुझे नहीं पता कि मैं इस धारणा के तहत क्यों था कि बेस 64 डिफ़ॉल्ट रूप से स्थापित नहीं था; यह पूरी तरह से मामला नहीं है।
जिरह

1
हालांकि यह उबंटू स्टैक एक्सचेंज है, opensslजिसका उपयोग करके base64विंडोज पर गिट बैश में काम करने के मानक से अधिक लाभ है , कम से कम 1.8.1 पुराने गेट बैश संस्करण जो मैंने स्थापित किए हैं।
विर्क

38

हेयर यू गो!

अपनी ~/.bashrcफ़ाइल के नीचे निम्नलिखित जोड़ें :

decode () {
  echo "$1" | base64 -d ; echo
}

अब, एक नया टर्मिनल खोलें और कमांड चलाएं।

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

यह वही करेगा जो आपने अपने प्रश्न में पूछा था।


20

आपकी मूल निर्भरता के साथ यह संभव है कि आपकी मूल स्क्रिप्ट में मामूली संशोधन के साथ:

echo $1 | python -m base64 -d

यदि आप एक फ़ाइल नाम नहीं देते हैं, तो वह अजगर मॉड्यूल मानक इनपुट से पढ़ता है। इसमें पहले पैरामीटर को पाइप करने के लिए आप इसका उपयोग कर सकते हैं echo $1 |


1
इसके अलावा: पायथन एम-बेस 32 फ़ाइलनाम
केनोरब

1
इस काम नहीं करता है :) लेकिन .b32 का उपयोग * तरीकों
RZR

13

मैंने http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities में बेस 64 कमांड लाइन पर टिप्पणी की । इसलिए मैं एक चेतावनी जारी करता हूं जब ओपनसेल बेस 64 डिकोडिंग का उपयोग कर रहा हूं:

 openssl base64 -e <<< 'Welcome to openssl wiki'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

चेतावनी बेस 64 लाइन की लंबाई openssl में डिफ़ॉल्ट रूप से 64 अक्षरों तक सीमित है :

 openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
 that splits...'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

=> कुछ नहीं!

बिना लाइन फीड के बेस 64 लाइन को डीकोड करने में सक्षम होना चाहिए जो 64 अक्षरों से अधिक का उपयोग करता है -एक विकल्प:

openssl base64 -d -A <<<
'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

Welcome to openssl wiki with a very long line that splits...

यह वैसे भी 64 अक्षर लाइनों में वास्तविक स्प्लिट बेस 64 परिणाम के लिए बेहतर है क्योंकि ए विकल्प बुग्गी (लंबी फाइलों के साथ सीमा) है।


4

का उपयोग करते हुए perl

perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

या साथ ही python

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

2

बस इसे करने के लिए एक और तरीका जोड़ना है:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.