openssl
может сделать это для вас, и все это установлено с OS X по умолчанию; нет необходимости устанавливать darwinports.
$ openssl base64 -in <infile> -out <outfile>
Без -in
опции читает из stdin
Есть ли в Mac OS X команда терминала, которая будет base64 кодировать файл или стандартный ввод?
openssl
может сделать это для вас, и все это установлено с OS X по умолчанию; нет необходимости устанавливать darwinports.
$ openssl base64 -in <infile> -out <outfile>
Без -in
опции читает из stdin
Openssl можно использовать более кратко:
echo -n 'input' | openssl base64
[echo -n -> необходимо использовать, иначе будет выполнено кодирование, включая символ новой строки]
или же
openssl base64 <ENTER> [type input] <CTRL+D>
Try using:
base64 -i <in-file> -o <outfile>
It should be available by default on OS X.
base64
команда доступна по умолчанию на моей OS X 10.9.4.
Вы можете использовать base64 <<< string
и base64 -D <<< string
для кодирования и декодирования строки в терминале, или base64 -in file
и base64 -D -in file
для кодирования и декодирования файла.
Поскольку Python поставляется с OS X по умолчанию, вы можете использовать его, как показано ниже:
$ echo FOO | python -m base64 Rk9PCg== $ echo Rk9PCg== | python -m base64 -d FOO
Или установите coreutils
через Brew ( brew install coreutils
), которая будет предоставлять base64
команду:
$ echo FOO | base64 Rk9PCg== $ echo Rk9PCg== | base64 -d FOO
In terms of speed, I would use openssl followed by perl, followed by uuencode. In terms of portability, I would use uuencode followed by Perl followed by openssl (If you care about reusing the code on as many other UNIX like stock platforms as possible). Be careful though because not all UNIX variants support the -m switch (iirc AIX does, HP/UX does, Solaris doesn't).
$ 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
Use the -m switch to uuencode file_in.txt per base64 as specified by RFC1521 and write it to filename.b64 (with filename_when_uudecoded.txt as the default filename when decoded):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
STDIN example:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Вы также можете передать его прямо в буфер обмена (по крайней мере, на Mac):
openssl base64 -in [filename] | pbcopy
uuencode -m [-o output_file] [file] name
Где имя - это имя, отображаемое в закодированном заголовке.
Пример:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
или же
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
Python comes preinstalled on all macs nowadays.
In Terminal run python
(or ipython).
Encode a file:
base64data = open('myfile.jpg','rb').read().encode('base64') open('myfile.txt','w').write(base64data)
Decode a file:
data = open('myfile.txt').read().decode('base64') open('myfile.jpg','wb').write(data)
Of course, both operations can be converted to a oneliner but this way it is more readable.
## 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
Omitting the -out
/-output... filename
will print to stdout.
Another ootb utility present both in OSX and 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
For some reason, echo -n <data> | openssl base64
added a newline in the middle of my base64 data. I assume it was because my base64 data was really long.
Using echo -n <data> | base64
to encode and echo -n <base64-ed data> | base64 -D
to decode worked fine.