Come posso decodificare una stringa base64 dalla riga di comando?

316

Vorrei scrivere uno script bash per decodificare una stringa base64. Ad esempio, digito decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== e stampa Aladdin:open sesame e torna al prompt.

Finora ho provato un semplice file bash contenente python -m base64 -d ma questo comando si aspetta un nome file non una stringa. Esiste un altro comando non interattivo (non necessariamente in un modulo Python) che posso eseguire dalla riga di comando per ottenere ciò, senza dover installare pacchetti aggiuntivi? (O se lo faccio, qualcosa di super-minimal.)

    
posta d3vid 21.08.2012 - 14:17
fonte

7 risposte

474

Usa il programma base64 dal pacchetto coreutils :

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

Oppure, per includere il carattere di nuova riga

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

output (include newline):

Aladdin:open sesame
    
risposta data January 21.08.2012 - 15:34
fonte
74

openssl può anche codificare e decodificare base64

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

EDIT: un esempio in cui la stringa codificata base64 finisce su più righe:

$ 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.
    
risposta data geirha 22.08.2012 - 00:23
fonte
32

Ecco qua!

Aggiungi quanto segue in fondo al tuo file ~/.bashrc :

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

Ora apri un nuovo Terminale ed esegui il comando.

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Questo farà esattamente ciò che hai chiesto nella tua domanda.

    
risposta data SirCharlo 21.08.2012 - 15:39
fonte
18

Con le tue dipendenze originali è possibile farlo con una piccola modifica allo script originale:

echo  | python -m base64 -d

Se non si passa un nome di file, quel modulo python legge dallo standard input. Per reinserire il primo parametro, puoi utilizzare echo | .

    
risposta data AmanicA 05.10.2012 - 14:15
fonte
12

Ho commentato la riga di comando base64 nel link . Quindi emetto un avviso quando si utilizza decodifica openssl base64:

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

avviso la lunghezza della linea base64 è limitata a 64 caratteri per impostazione predefinita in openssl :

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

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

= & gt; NIENTE!

per poter decodificare una linea base64 senza un avanzamento di riga superiore a 64 caratteri, utilizzare l'opzione -A:

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

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

Questo è comunque meglio per il risultato effettivo di base64 suddiviso in 64 righe di caratteri poiché l'opzione -A è BUGGY (limite con file lunghi).

    
risposta data philippe lhardy 23.03.2013 - 19:23
fonte
4

Uso di perl

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

O lo stesso con python

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

Solo per aggiungere un altro modo per farlo:

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

Leggi altre domande sui tag