Wie kann ich einen base64-String von der Kommandozeile dekodieren?


Zur akzeptierten Antwort gehen


Ich möchte ein Bash-Skript schreiben, um einen Base64-String zu dekodieren. Zum Beispiel tippe ich decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== und es druckt Aladdin:open sesame und kehrt zur Eingabeaufforderung zurück.

Bisher habe ich eine einfache Bash-Datei ausprobiert, die python -m base64 -d $1 jedoch einen Dateinamen und keine Zeichenfolge erwartet. Gibt es einen anderen nicht interaktiven Befehl (nicht unbedingt in einem Python-Modul), den ich über die Befehlszeile ausführen kann, um dies zu erreichen, ohne zusätzliche Pakete installieren zu müssen? (Oder wenn ich es tue, etwas Super-Minimales.)


442





2012-08-21




Anzahl der Antworten: 7


Verwenden Sie einfach das base64 Programm aus dem coreutils Paket:

 echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode
 

Oder, um das Zeilenumbruchzeichen einzuschließen

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

Ausgabe (einschließlich Zeilenvorschub):

 Aladdin:open sesame
 

646


2012-08-21

openssl kann base64 auch codieren und decodieren

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

BEARBEITEN: Ein Beispiel, in dem der base64-codierte String in mehreren Zeilen endet:

 $ 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.
 

97


2012-08-21

Bitte schön!

Fügen Sie am Ende Ihrer ~/.bashrc Datei Folgendes hinzu :

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

Öffnen Sie nun ein neues Terminal und führen Sie den Befehl aus.

 decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
 

Dies wird genau das tun, was Sie in Ihrer Frage gefragt haben.


38


2012-08-21

Bei Ihren ursprünglichen Abhängigkeiten ist dies mit einer geringfügigen Änderung Ihres ursprünglichen Skripts möglich:

 echo $1 | python -m base64 -d
 

Wenn Sie keinen Dateinamen übergeben, liest das Python-Modul von der Standardeingabe. Um den ersten Parameter einzugeben, können Sie verwenden echo $1 | .


20


2012-10-05

Ich habe die base64-Befehlszeile in http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities kommentiert . Deshalb gebe ich eine Warnung aus, wenn ich OpenSSL Base64-Dekodierung verwende:

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki
 

In openssl ist die Zeilenlänge von base64 standardmäßig auf 64 Zeichen begrenzt :

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

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

=> NICHTS!

Um eine Base64-Zeile ohne Zeilenvorschub mit mehr als 64 Zeichen zu dekodieren, verwenden Sie die Option -A:

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

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

Dies ist ohnehin besser, um das base64-Ergebnis in 64-Zeichen-Zeilen aufzuteilen, da die Option -A auf BUGGY (Limit bei langen Dateien) gesetzt ist.


13


2013-03-23

Verwenden perl

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

Oder das selbe mit python

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

4


2015-07-02

Nur um einen anderen Weg hinzuzufügen:

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

2


2016-06-15