Risposte:
openssl
puoi farlo per te, ed è tutto installato con OS X per impostazione predefinita; non è necessario installare darwinports.
$ openssl base64 -in <infile> -out <outfile>
Senza il -in
opzione legge da stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
o cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
per saltare la scrittura su un file e copiare l'output codificato in base 64 negli Appunti senza interruzioni di riga.
-d
contrassegno da decodificare.
openssl base64 -e <<< ram
e per decodificare: openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
lo fa + @ kenny sulla decodifica se l'input non ha newline ogni 76 caratteri al massimo, incluso il caso no-newlines che ho appena detto, è necessario -d -A
o otterrai dati mancanti o danneggiati senza messaggi di errore (anche se c'è una segnalazione di bug in sospeso che può portare a una correzione).
openssl base64 -e <<< ram
in realtà codifica 4 byte, incluso un feed di riga finale; vedere hexdump <<< ram
.
Openssl può essere usato più succintamente:
echo -n 'input' | openssl base64
[echo -n - & gt; deve essere usato, o la codifica verrà eseguita incluso il carattere della nuova riga]
o
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
senza openssl
. Ad ogni modo, devo premere Ctrl + D due volte. E attenzione, @Garret: a Bash, con o senza openssl
, openssl base64 <<< superuser
e openssl base64 <<< "superuser"
erroneamente dare la precedenza c3VwZXJ1c2VyCg==
, poiché la "stringa qui" include ancora un avanzamento di riga! ( Apparentemente non solo in Bash, ma anche in zsh, ksh e yash. Vedere hexdump <<< superuser
. Il risultato di Base64 dovrebbe essere c3VwZXJ1c2Vy
.)
echo -n
è preferibile se non hai bisogno della nuova riga. È certamente qualcosa di cui essere a conoscenza.
printf
al posto di echo -n
Prova a usare:
base64 -i <in-file> -o <outfile>
Dovrebbe essere disponibile per impostazione predefinita su OS X.
--decode
per invertire il processo da base64 a normale.
base64
il comando è disponibile di default sul mio OS X 10.9.4.
Puoi usare base64 <<< string
e base64 -D <<< string
codificare e decodificare una stringa nel terminale, o base64 -in file
e base64 -D -in file
per codificare e decodificare un file.
Invalid characer in input stream
quando si usa <<<
... ci ho provato "
, '
e niente attorno alla corda.
Poiché Python viene fornito con OS X per impostazione predefinita, puoi utilizzarlo come di seguito:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
O installare coreutils
attraverso infuso ( brew install coreutils
) che fornirà base64
comando:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
In termini di velocità, userei openssl seguito da perl, seguito da uuencode. In termini di portabilità, userei uuencode seguito da Perl seguito da openssl (Se ti interessa riutilizzare il codice su quante più piattaforme di magazzino UNIX possibile). Attenzione però perché non tutte le varianti UNIX supportano l'opzione -m (iir AIX fa, HP / UX sì, Solaris no).
$ time perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' \
> out.jpg 1>filename.b64
real 0m0.025s
$ time uuencode -m -o filename.b64 out.jpg filename_when_uudecoded.txt
real 0m0.051s
$ time openssl base64 -in out.jpg -out filename.b64
real 0m0.017s
Usa l'opzione -m per uuencode file_in.txt per base64 come specificato da RFC1521 e scriverlo su nomefile.b64 (con nomefile_when_uudecoded.txt come nome file predefinito quando decodificato):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Esempio STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
uuencode -m [-o output_file] [file] name
Dove nome è il nome da visualizzare nell'intestazione codificata.
Esempio:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
o
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
non è la codifica come base64
Per qualche ragione, echo -n <data> | openssl base64
aggiunta una nuova riga nel mezzo dei miei dati di base64. Presumo che fosse perché i miei dati di base64 erano davvero lunghi.
utilizzando echo -n <data> | base64
codificare e echo -n <base64-ed data> | base64 -D
decodificare ha funzionato bene.
Python viene preinstallato su tutti i Mac al giorno d'oggi.
In Terminal run python
(o ipython ).
Codifica un file:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Decodifica un file:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Naturalmente, entrambe le operazioni possono essere convertite in un oneliner, ma in questo modo è più leggibile.
## encode to base64 (on OSX use `-output`)
openssl base64 -in myfile.jpg -output myfile.jpg.b64
## encode to base64 (on Linux use `-out`)
openssl base64 -in myfile.jpg -out myfile.jpg.b64
## decode from base64 (on OSX `-output` should be used)
openssl base64 -d -in myfile.jpg.b64 -output myfile.jpg
## decode from base64 (on Linux `-out` should be used)
openssl base64 -d -in myfile.jpg.b64 -out myfile.jpg
Omettendo il -out
/ -output... filename
stamperà su stdout.
Un'altra utility ootb presente sia in OSX che Ubuntu:
## encode to base64
base64 < myfile.jpg > myfile.jpg.b64
## decode from base64 (OSX) (note the uppercase 'D')
base64 -D < myfile.jpg.b64 > myfile.jpg
## decode from base64 (Linux) (note the lowercase 'd')
base64 -d < myfile.jpg.b64 > myfile.jpg
C'è Perl plus MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Questo è preinstallato. È possibile specificare file separati sulla riga di comando (o fornire i dati sullo standard input); ogni file è codificato separatamente. Puoi anche fare:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Questo esegue il backup di file1 su file1.txt e scrive l'output codificato Base-64 sul file originale.
Una semplice versione di NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(e adesso base64
) venire con il sistema operativo.
recode dovrebbe fare il trucco per te
recode ../b64 < file.txt > file.b64
recode è disponibile per OS X tramite MacPorts .
base64
comando.
Se si sta codificando come base64 un file font, è possibile farlo:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Lo uso su un Mac (10.10) tutto il tempo.
Nota : Non ci saranno interruzioni di riga.
Oltre alla risposta di Steve Folly sopra, quando si esegue la crittografia in modalità stdin, per evitare il passaggio di nuove righe aggiuntive, premere CTRL + D due volte per terminare l'input senza alcuna nuova riga aggiuntiva. L'output verrà visualizzato subito dopo la stessa riga.
Per esempio:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
In alternativa, puoi usare printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
base64 -d
obase64 -D
dipende dal tuo sistema operativo. OSX utilizza-D
.