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


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

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


320
2017-08-21 12:17


मूल




जवाब:


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

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

या, न्यूलाइन चरित्र शामिल करने के लिए

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

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

Aladdin:open sesame

484
2017-08-21 13:34



या: echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode और echo - Greg Chabala
या: base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ== - jmk
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txt गिट के बेस 64 के साथ विंडोज़ पर। - Fire
@ जनवरी यह नहीं है Just use, क्योंकि बहुत से लोग इसके बारे में जानते हैं base64 कार्यक्रम - लेकिन जैसा कि कोई नहीं कर सकता केवल कमांड लाइन विकल्प के रूप में एक स्ट्रिंग डालें, सिंटैक्स को उन उपयोगकर्ताओं के लिए सही करना मुश्किल है जो सीएलआई को थोड़ी देर में स्पर्श करते हैं। - feeela
मैक पर, एन्कोडेड स्ट्रिंग को क्लिपबोर्ड में कॉपी करें और चलाएं pbpaste | base64 --decode। - Marián Černý


openssl बेस 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.

75
2017-08-21 22:23



फिलिप के जवाब के लिए धन्यवाद, आपको लंबे बेस 64 स्ट्रिंग्स के लिए -ए जोड़ने की ज़रूरत है अन्यथा openssl कुछ भी वापस नहीं करेगा, देखें askubuntu.com/a/271676/305568 - morloch
@morloch या बस बेस 64 एन्कोडेड डेटा से नई लाइनों को हटाने से बचें, और यह अपेक्षित के रूप में काम करता है ... - geirha
मैं विचार नहीं करता coreutils एक "अतिरिक्त" पैकेज जैसे प्रोग्राम ls, mkdir, cp, mv, तथा chmod। मुझे संदेह है कि आप इसके बिना अपनी मशीन के साथ कुछ भी उपयोगी कर सकते हैं। - vidstige
@ vidstige, यह सच है। मुझे नहीं पता कि मैं इस धारणा के तहत क्यों था कि बेस 64 डिफ़ॉल्ट रूप से स्थापित नहीं किया गया था; यह पूरी तरह से मामला नहीं है। - geirha
जबकि यह उबंटू स्टैक एक्सचेंज है, इसका उपयोग कर रहा है openssl मानक पर लाभ है base64 विंडोज़ पर गिट बैश में काम करने के लिए, कम से कम पुराने 1.8.1 गिट बैश संस्करण मैंने स्थापित किया है। - willkil


हेयर यू गो!

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

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

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

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

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


32
2017-08-21 13:39





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

echo $1 | python -m base64 -d

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


18
2017-10-05 12:15



इसके अलावा: पायथन -एम बेस 32 फ़ाइल नाम - kenorb
यह काम नहीं करता :) लेकिन .b32 * विधियों का उपयोग करें - rzr


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

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

चेतावनी opens64 लाइन लंबाई डिफ़ॉल्ट रूप से 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...

यह वैसे भी 6464 वर्णों में वास्तविक रूप से विभाजित बेस 64 परिणाम के लिए बेहतर है -एक विकल्प बगजी (लंबी फ़ाइलों के साथ सीमा) है।


12
2018-03-23 18:23



@ सेठ कृपया ब्लॉक को सही ढंग से रीसेट करें, आपके संपादन में मेरी इंटरलीव टिप्पणियों के साथ openssl कमांड विलय हो गया है। - philippe lhardy
क्या आप इसे ठीक कर सकते हैं? मैं दोनों के बीच अंतर नहीं कर सकता ... मैं कोशिश करूंगा, लेकिन आपको मेरी मदद करने की आवश्यकता हो सकती है ;-) - Seth♦
ठीक है बस एक नज़र रखना है wiki.opensslfoundation.com/... जहां मैं विकी वाक्यविन्यास का बेहतर उपयोग करने में कामयाब रहा (इस पृष्ठ में खोज बेस 64)। - philippe lhardy


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

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

या साथ ही python

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

4
2017-07-02 20:22





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

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'

2
2018-06-15 06:27