Antworten:
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
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
oder cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
, um das Schreiben in eine Datei zu überspringen und die Base64-codierte Ausgabe ohne Zeilenumbrüche in die Zwischenablage zu kopieren.
-d
Flag um zu dekodieren.
openssl base64 -e <<< ram
und decodieren:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
macht das. + @kenny bei der Dekodierung, wenn die Eingabe nicht alle 76 Zeichen einen Zeilenumbruch enthält, einschließlich des von mir angegebenen Falls, dass keine Zeilenumbrüche vorliegen. Andernfalls -d -A
werden fehlende oder beschädigte Daten ohne Fehlermeldung angezeigt (obwohl ein Fehlerbericht vorliegt, der noch aussteht) kann zu einer Behebung führen).
openssl base64 -e <<< ram
codiert tatsächlich 4 Bytes, einschließlich eines Zeilenvorschubs am Ende; sehen hexdump <<< ram
.
Openssl kann prägnanter verwendet werden:
echo -n 'input' | openssl base64
[echo -n -> muss verwendet werden, andernfalls erfolgt die Codierung einschließlich neuer Zeilenzeichen]
oder
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
ohne verwenden openssl
. In beiden Fällen muss ich zweimal Strg + D drücken. Und Vorsicht, @Garret: in Bash, mit oder ohne openssl
, openssl base64 <<< superuser
und openssl base64 <<< "superuser"
fälschlicherweise nachgeben c3VwZXJ1c2VyCg==
, da der "Hier-String" dann noch einen Zeilenvorschub enthält! ( Anscheinend nicht nur in Bash, sondern auch in zsh, ksh und yash. Siehe hexdump <<< superuser
. Das Base64-Ergebnis sollte sein c3VwZXJ1c2Vy
.)
echo -n
ist vorzuziehen, wenn Sie den Zeilenumbruch nicht benötigen. Es ist sicherlich etwas zu beachten.
printf
anstelle vonecho -n
Versuchen Sie es mit:
base64 -i <in-file> -o <outfile>
Es sollte standardmäßig unter OS X verfügbar sein.
--decode
, um den Vorgang von base64 auf normal umzukehren.
openssl base64
. Vielen Dank!
base64
Befehl ist standardmäßig in meinem OS X 10.9.4 verfügbar.
Sie können verwenden base64 <<< string
und base64 -D <<< string
zu codieren und einen String im Terminal zu entschlüsseln, oder base64 -in file
und base64 -D -in file
zu codieren und eine Datei zu entschlüsseln.
Invalid characer in input stream
bei der Verwendung von <<<
... Ich habe versucht , mit "
, '
und nichts um die Zeichenfolge.
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 installieren Sie coreutils
über Brew ( brew install coreutils
), das den base64
Befehl liefert :
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
In Bezug auf die Geschwindigkeit würde ich openssl gefolgt von perl gefolgt von uuencode verwenden. In Bezug auf die Portabilität würde ich uuencode gefolgt von Perl gefolgt von openssl verwenden. 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 in filename.b64 zu schreiben (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
Python ist heutzutage auf allen Macs vorinstalliert.
Im Terminal laufen python
(oder ipython ).
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.
## 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 das -out
/ weglassen, -output... filename
wird auf 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
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
uuencode
ist nicht die Kodierung alsbase64
Aus irgendeinem Grund wurde echo -n <data> | openssl base64
eine neue Zeile in die Mitte meiner base64-Daten eingefügt. Ich nehme an, das lag daran, dass meine base64-Daten sehr lang waren.
Mit echo -n <data> | base64
zu codieren und echo -n <base64-ed data> | base64 -D
zu decodieren hat gut funktioniert.
Zusätzlich zu der 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 Folgendes verwenden printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
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 tun:
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.
Eine einfache NodeJS-Version:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(und jetzt base64
) mit dem Betriebssystem.
recode sollte den Trick für dich tun
recode ../b64 < file.txt > file.b64
recode ist für OS X über MacPorts verfügbar .
base64
Befehl.
Wenn Sie eine Schriftartdatei 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 werden keine Zeilenumbrüche angezeigt.
Wir haben eine Liste von plattformübergreifenden Shell-Befehlen zusammengestellt, um eine Datei als base64 zu kodieren. Mit den folgenden Befehlen wird eine Eingabedatei ( deploy.key
in den Beispielen benannt) ohne Zeilenumbruch in base64 konvertiert. Die base64-Ausgabe wird über stdout auf das Terminal gedruckt.
# For systems with openssl
openssl base64 -A -in=deploy.key
# For systems with Python (2 or 3) installed
python -c "import base64; print(base64.standard_b64encode(open('deploy.key', 'rb').read()).decode())"
# For Windows or Linux systems that have the GNU coreutils base64 command
base64 --wrap=1000000 deploy.key
# For macOS systems
base64 --break=1000000 deploy.key
Um die Ausgabe in eine Datei umzuleiten, hängen Sie sie an > base64-encoded.txt
(mit einem Dateinamen Ihrer Wahl).
Diese Befehle wurden als Teil dieser Pull-Anforderung als Prototyp erstellt, bei der plattformübergreifende Shell-Befehle zum Base64-Codieren eines privaten SSH-Schlüssels zum Entfernen von Zeilenumbrüchen benötigt wurden.
base64 -d
oderbase64 -D
je nach Betriebssystem. OSX verwendet-D
.