Wie kann ich eine Base64-Zeichenfolge von der Befehlszeile dekodieren?

316

Ich möchte ein Bash-Skript schreiben, um einen Base64-String zu dekodieren. Zum Beispiel gebe ich decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== ein und drucke Aladdin:open sesame und kehre zur Eingabe zurück.

Bisher habe ich eine einfache bash-Datei versucht, die python -m base64 -d enthält, aber dieser Befehl erwartet einen Dateinamen und keine Zeichenfolge. Gibt es einen anderen nicht interaktiven Befehl (nicht unbedingt in einem Python-Modul), den ich von der Befehlszeile aus ausführen kann, ohne dass dazu zusätzliche Pakete installiert werden müssen? (Oder wenn ich etwas Superminimales mache.)

    
d3vid 21.08.2012, 14:17
quelle

7 Antworten

474

Verwenden Sie einfach das Programm base64 aus dem Paket coreutils :

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

Oder um das Zeilenumbruchzeichen einzufügen

echo 'echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode'

Ausgabe (enthält Zeilenschaltung):

Aladdin:open sesame
    
January 21.08.2012, 15:34
quelle
74

openssl kann auch base64

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

EDIT: Ein Beispiel, in dem die Base64-codierte Zeichenfolge 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.
    
geirha 22.08.2012 00:23
quelle
32

Hier gehen Sie!

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

decode () {
  echo "" | 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 verlangt haben.

    
SirCharlo 21.08.2012 15:39
quelle
18

Mit Ihren ursprünglichen Abhängigkeiten ist es möglich, dies mit einer kleinen Änderung an Ihrem ursprünglichen Skript zu tun:

echo  | python -m base64 -d

Wenn Sie keinen Dateinamen übergeben, liest dieses Python-Modul die Standardeingabe. Um den ersten Parameter dorthin zu leiten, können Sie echo | verwenden.

    
AmanicA 05.10.2012 14:15
quelle
12

Ich habe die base64-Befehlszeile in Pfandrecht kommentiert. Daher gebe ich eine Warnung aus, wenn ich openssl base64-Decodierung verwende:

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

warning Die Länge der base64-Zeile ist standardmäßig auf 64 Zeichen in openssl begrenzt :

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

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

= & gt; NICHTS!

Um eine base64-Zeile ohne Zeilenvorschub dekodieren zu können, die 64 Zeichen überschreitet, verwenden Sie die Option -A:

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

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

Dies ist sowieso besser, um das base64-Ergebnis in Zeilen mit 64 Zeichen zu teilen, da die Option-BUGGY ist (Limit mit langen Dateien).

    
philippe lhardy 23.03.2013 19:23
quelle
4

Verwenden von perl

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

Oder das gleiche mit python

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
    
A.B. 02.07.2015 22:22
quelle
2

Nur um eine andere Möglichkeit hinzuzufügen:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
    
erjoalgo 15.06.2016 08:27
quelle

Tags und Links