Odpowiedzi:
openssl
może zrobić to za Ciebie, i to wszystko jest domyślnie instalowane z OS X; nie trzeba instalować darwinports.
$ openssl base64 -in <infile> -out <outfile>
Bez -in
opcji czyta ze standardowego wejścia
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
lub, cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
aby pominąć zapisywanie do pliku i po prostu skopiuj dane wyjściowe zakodowane w standardzie base64 do schowka bez podziału linii.
-d
flagi do dekodowania.
openssl base64 -e <<< ram
i do dekodowania:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
robi to. + @kenny przy dekodowaniu, jeśli dane wejściowe nie mają znaku nowej linii co najwyżej 76 znaków, w tym przypadek braku nowych linii, który właśnie powiedziałem, że potrzebujesz -d -A
lub utracisz lub uszkodzisz dane bez komunikatu o błędzie (chociaż jest zgłoszenie błędu, które może spowodować naprawienie tego).
openssl base64 -e <<< ram
faktycznie koduje 4 bajty, w tym znak końca linii; zob hexdump <<< ram
.
Otwartego można używać bardziej zwięźle:
echo -n 'input' | openssl base64
[echo -n -> musi być użyte, inaczej kodowanie zostanie wykonane łącznie ze znakiem nowej linii]
lub
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
bez openssl
. Tak czy inaczej, muszę nacisnąć Ctrl + D dwa razy. I uważaj, @Garret: bash, z lub bez openssl
, openssl base64 <<< superuser
i openssl base64 <<< "superuser"
błędnie wydajność c3VwZXJ1c2VyCg==
, jak „tu napisu” wtedy nadal obejmuje wysunięcie wiersza! ( Podobno nie tylko w Bash, ale także w zsh, ksh i yash. Zobacz hexdump <<< superuser
. Wynik Base64 powinien być c3VwZXJ1c2Vy
.)
echo -n
jest preferowany, jeśli nie potrzebujesz nowej linii. Z pewnością należy o tym pamiętać.
printf
zamiastecho -n
Spróbuj użyć:
base64 -i <in-file> -o <outfile>
Powinien być domyślnie dostępny w systemie OS X.
--decode
aby odwrócić proces z base64 na normalny.
openssl base64
. Dzięki!
base64
polecenie jest domyślnie dostępne w moim systemie OS X 10.9.4.
Możesz użyć base64 <<< string
i base64 -D <<< string
do zakodowania i zdekodowania łańcucha w terminalu, lub base64 -in file
oraz base64 -D -in file
do zakodowania i zdekodowania pliku.
Invalid characer in input stream
przy użyciu <<<
... Próbowałem z "
, '
i nic wokół napisu.
Ponieważ Python jest domyślnie dostarczany z systemem OS X, możesz go używać w następujący sposób:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Lub zainstaluj coreutils
za pomocą Brew ( brew install coreutils
), który zapewni base64
polecenie:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
Pod względem prędkości użyłbym openssl, następnie perl, a następnie uuencode. Jeśli chodzi o przenośność, użyłbym uuencode, a następnie Perla, a następnie openssl (jeśli zależy ci na ponownym użyciu kodu na jak największej liczbie innych platform giełdowych typu UNIX). Bądź jednak ostrożny, ponieważ nie wszystkie warianty UNIX obsługują przełącznik -m (iirc AIX obsługuje, HP / UX obsługuje, Solaris nie).
$ 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
Użyj przełącznika -m do uuencode file_in.txt na base64, jak określono w RFC1521, i zapisz go do filename.b64 (z filename_when_uudecoded.txt jako domyślną nazwą pliku po zdekodowaniu):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Przykład STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Python jest obecnie zainstalowany fabrycznie na wszystkich komputerach Mac.
W trybie terminalowym python
(lub ipython ).
Zakoduj plik:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Dekoduj plik:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Oczywiście obie operacje można przekształcić w oneliner, ale w ten sposób jest bardziej czytelny.
## 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
Pominięcie -out
/ -output... filename
spowoduje wydrukowanie na standardowe wyjście.
Kolejne narzędzie ootb obecne zarówno w OSX, jak i 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
uuencode -m [-o output_file] [file] name
Gdzie nazwa to nazwa wyświetlana w zakodowanym nagłówku.
Przykład:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
lub
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
nie jest kodowaniem jakbase64
Z jakiegoś powodu echo -n <data> | openssl base64
dodałem nowy wiersz w środku moich danych base64. Zakładam, że było tak, ponieważ moje dane base64 były naprawdę długie.
Używanie echo -n <data> | base64
do kodowania i echo -n <base64-ed data> | base64 -D
dekodowania działało dobrze.
Oprócz powyższej odpowiedzi Steve'a Folly, podczas szyfrowania w trybie standardowym, aby uniknąć przejścia dodatkowych nowych linii, naciśnij CTRL + D dwa razy, aby zakończyć wprowadzanie bez żadnych nowych linii. Dane wyjściowe zostaną wyświetlone zaraz po tej samej linii.
Na przykład:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Alternatywnie możesz użyć printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Istnieje Perl plus MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
To jest fabrycznie zainstalowane. Możesz podać osobne pliki w wierszu poleceń (lub podać dane na standardowym wejściu); każdy plik jest osobno zakodowany. Możesz także:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Spowoduje to utworzenie kopii zapasowej pliku1 do pliku1.txt i zapisanie danych wyjściowych zakodowanych w formacie Base-64 na oryginalnym pliku.
Prosta wersja NodeJS:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(i teraz base64
) pochodzi z systemem operacyjnym.
recode powinno załatwić sprawę
recode ../b64 < file.txt > file.b64
recode jest dostępny dla OS X za pośrednictwem MacPorts .
base64
polecenie.
Jeśli kodujesz plik czcionki base64, możesz to zrobić:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Używam tego cały czas na komputerze Mac (10.10).
Uwaga : nie będzie łamania linii.
Zebraliśmy listę poleceń powłoki między platformami, aby zakodować plik jako base64. Następujące polecenia pobierają plik wejściowy (nazwany deploy.key
w przykładach) i konwertują go na base64 bez zawijania nowego wiersza. Wyjście base64 jest drukowane na terminalu przez standardowe wyjście.
# 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
Aby przekierować wyjście do pliku, dołącz > base64-encoded.txt
(używając wybranej nazwy pliku).
Te polecenia zostały prototypowane jako część tego żądania ściągnięcia, w którym chcieliśmy, aby międzyplatformowe polecenia powłoki do base64 kodowały klucz prywatny SSH w celu usunięcia znaków nowej linii.
base64 -d
lubbase64 -D
zależy od tego systemu operacyjnego. Używa OSX-D
.