it-swarm.com.de

Wie codiere ich base64 über die Kommandozeile?

Gibt es unter Mac OS X einen Terminalbefehl, mit dem base64 eine Datei oder stdin codiert?

195
Josh

openssl kann dies für Sie tun und alles wird standardmäßig mit OS X installiert. darwinports muss nicht installiert werden.

$ openssl base64 -in <infile> -out <outfile>

Ohne die -in Option liest stdin aus

211
Steve Folly

Openssl kann prägnanter verwendet werden:

echo -n 'input' | openssl base64

[echo -n -> muss verwendet werden, andernfalls erfolgt die Codierung einschließlich des Zeichens einer neuen Zeile]

oder

openssl base64 <ENTER> [type input] <CTRL+D>
82
Glen

Versuchen Sie es mit:

base64 -i <in-file> -o <outfile>

Es sollte standardmäßig unter OS X verfügbar sein.

47
Derreck Dean

Der Befehl base64 ist unter OS X 10.9.4 standardmäßig verfügbar.

Sie können base64 <<< string und base64 -D <<< string verwenden, um eine Zeichenfolge im Terminal zu codieren und zu decodieren, oder base64 -in file und base64 -D -in file, um eine Datei zu codieren und zu decodieren.

28
WKPlus

Da Python standardmäßig mit OS X geliefert wird, können Sie es wie folgt verwenden:

$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO

Oder installiere coreutils über Brew (brew install coreutils), was den Befehl base64 liefert:

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
7
kenorb

Sie können es auch direkt in die Zwischenablage leiten (zumindest auf einem Mac):

openssl base64 -in [filename] | pbcopy

5
Steve

In Bezug auf die Geschwindigkeit würde ich openssl verwenden, gefolgt von Perl, gefolgt von uuencode. In Bezug auf die Portabilität würde ich uuencode gefolgt von Perl gefolgt von openssl verwenden (wenn Sie den Code auf möglichst vielen anderen UNIX-ähnlichen Stock-Plattformen wiederverwenden möchten). Seien Sie jedoch vorsichtig, da nicht alle UNIX-Varianten den Schalter -m unterstützen (iirc AIX, HP/UX, Solaris nicht).

$ 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

Verwenden Sie die Option -m, um file_in.txt pro base64 wie in RFC1521 angegeben zu uuencodieren, und schreiben Sie sie in filename.b64 (wobei filename_when_uudecoded.txt als Standarddateiname beim Dekodieren verwendet wird):

uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt

STDIN Beispiel:

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
5
phiz

Python

Python ist heutzutage auf allen Macs vorinstalliert.

Führen Sie im Terminal python (oder ipython ) aus.

Datei verschlüsseln:

 base64data = open('myfile.jpg','rb').read().encode('base64')
 open('myfile.txt','w').write(base64data)

Dekodiere eine Datei:

data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)

Natürlich können beide Operationen in einen Oneliner umgewandelt werden, aber auf diese Weise ist es besser lesbar.

OpenSSL

## 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

Wenn Sie den -out/-output... filename weglassen, wird auf stdout gedruckt.

base64

Ein weiteres ootb-Dienstprogramm, das sowohl in OSX als auch in Ubuntu vorhanden ist:

## 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
3
ccpizza
uuencode -m [-o output_file] [file] name

Wobei name der Name ist, der im codierten Header angezeigt werden soll.

Beispiel:

cat docbook-xsl.css | uuencode -m docbook-xsl.css

oder

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
2
user214207

Aus irgendeinem Grund fügte echo -n <data> | openssl base64 eine neue Zeile in die Mitte meiner base64-Daten ein. Ich nehme an, das lag daran, dass meine base64-Daten sehr lang waren.

Das Verwenden von echo -n <data> | base64 zum Codieren und echo -n <base64-ed data> | base64 -D zum Decodieren hat einwandfrei funktioniert.

2
Heath Borders

Eine einfache NodeJS-Version:

node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
1
mauvm

Es gibt Perl plus MIME :: Base64:

Perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'

Dies ist vorinstalliert. Sie können separate Dateien in der Befehlszeile angeben (oder die Daten über die Standardeingabe bereitstellen). Jede Datei wird separat codiert. Sie können auch:

Perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1

Dies sichert Datei1 in Datei1.txt und schreibt die Base-64-codierte Ausgabe über die Originaldatei.

1

Wenn Sie eine Schriftartendatei mit base64 codieren, können Sie dies tun:

base64 my-webfont.ttf > my-webfont.b64.ttf.txt

Ich benutze dies die ganze Zeit auf einem Mac (10.10).

Hinweis : Es wird keine Zeilenumbrüche geben.

1
Chuck Ugwuh

Zusätzlich zur obigen Antwort von Steve Folly drücken Sie beim Verschlüsseln im Standardmodus zweimal STRG + D, um die Eingabe ohne zusätzliche Zeilenumbrüche zu beenden, um das Übergeben zusätzlicher Zeilenumbrüche zu vermeiden. Die Ausgabe wird direkt nach derselben Zeile angezeigt.

Zum Beispiel:

$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$

Alternativ können Sie auch printf verwenden:

$ printf 'input' | openssl base64
aW5wdXQ=
$
1
bigT

Unter macOS benutze ich immer:

echo -n "STRING" | base64

-n soll ein neues Zeilenzeichen am Zeilenende vermeiden.

1
patrickS

recode sollte den Trick für dich tun

recode ../b64 < file.txt > file.b64

recode ist für OS X über MacPorts verfügbar.

1
heavyd