openssl
kann dies für Sie tun, und es ist alles standardmäßig mit OS X installiert; Darwinports müssen nicht installiert werden.
$ openssl base64 -in <infile> -out <outfile>
Ohne die -in
Option liest von stdin
Gibt es in Mac OS X einen Terminalbefehl, der base64 eine Datei oder stdin codiert?
openssl
kann dies für Sie tun, und es ist alles standardmäßig mit OS X installiert; Darwinports müssen nicht installiert werden.
$ openssl base64 -in <infile> -out <outfile>
Ohne die -in
Option liest von stdin
Openssl kann prägnanter verwendet werden:
echo -n 'input' | openssl base64
[echo -n -> muss verwendet werden, oder die Kodierung wird mit einem neuen Zeilenzeichen durchgeführt.]
oder
openssl base64 <ENTER> [type input] <CTRL+D>
Versuchen Sie es mit:
base64 -i <in-file> -o <outfile>
Es sollte standardmäßig unter OS X verfügbar sein.
base64
Der Befehl ist standardmäßig auf meinem OS X 10.9.4 verfügbar.
Sie können base64 <<< string
und verwenden base64 -D <<< string
, um eine Zeichenfolge im Terminal zu codieren und zu decodieren, oder base64 -in file
und base64 -D -in file
und, um eine Datei zu codieren und zu decodieren.
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 coreutils
über Brew ( brew install coreutils
) installieren, das den base64
Befehl liefert :
$ echo FOO | base64 Rk9PCg== $ echo Rk9PCg== | base64 -d FOO
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 Plattformplattformen wie möglich 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(<>)' \ > 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 gemäß den Angaben von RFC1521 zu uuencode zu schreiben und in dateiname.b64 zu schreiben (mit Dateiname_when_uudecoded.txt als Standarddateiname bei der Dekodierung):
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
Sie können es auch direkt an die Zwischenablage weiterleiten (zumindest auf einem Mac):
openssl base64 -in [filename] | pbcopy
uuencode -m [-o output_file] [file] name
Where name is the name to display in the encoded header.
Example:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
or
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
Heutzutage ist Python auf allen Macs vorinstalliert.
In Terminal ausführen python
(oder ipython ).
Eine Datei kodieren:
base64data = open('myfile.jpg','rb').read().encode('base64') open('myfile.txt','w').write(base64data)
Eine Datei dekodieren:
data = open('myfile.txt').read().decode('base64') open('myfile.jpg','wb').write(data)
Natürlich können beide Vorgänge in einen Oneliner konvertiert werden, auf diese Weise sind sie jedoch besser lesbar.
## 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
Auslassen von -out
/ -output... filename
wird an stdout gedruckt.
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
Aus irgendeinem Grund wurde echo -n <data> | openssl base64
in den Base64-Daten ein Zeilenumbruch hinzugefügt. Ich gehe davon aus, dass meine base64-Daten wirklich lang waren.
Die echo -n <data> | base64
Kodierung und echo -n <base64-ed data> | base64 -D
Dekodierung funktionierte einwandfrei.