2010-03-16 23:15:37 +0000 2010-03-16 23:15:37 +0000
243
243

Как кодировать base64 через командную строку?

Есть ли в Mac OS X терминальная команда, которая будет кодировать base64 файл или stdin?

Ответы (17)

252
252
252
2010-03-17 00:25:08 +0000

openssl может сделать это за вас, и все это установлено с OS X по умолчанию; нет необходимости устанавливать darwinports.

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

Без опции -in читает из stdin

107
107
107
2010-04-21 06:12:44 +0000

Openssl можно использовать более кратко:

echo -n 'input' | openssl base64

[echo -n -> необходимо использовать, иначе кодировка будет выполнена, включая новый символ строки]

или

openssl base64 <ENTER> [type input] <CTRL+D>
```.
54
54
54
2015-02-27 20:13:36 +0000

Попробуйте использовать:

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

Он должен быть доступен по умолчанию в OS X.

34
34
34
2016-03-17 02:48:49 +0000

Команда base64 доступна по умолчанию в моей ОС X 10.9.4.

Вы можете использовать base64 <<< string и base64 -D <<< string для кодирования и декодирования строки в терминале, или base64 -in file и base64 -D -in file для кодирования и декодирования файла.

16
16
16
2017-08-01 05:33:00 +0000

В макросах я всегда использую:

echo -n "STRING" | base64

-n, чтобы избежать нового символа строки в конце строки.

8
8
8
2015-05-25 17:19:49 +0000

Поскольку по умолчанию Python поставляется с операционной системой 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
```.
5
5
5
2012-09-05 07:43:32 +0000

С точки зрения скорости, я бы использовал openssl, за которым следовал бы perl, а затем uuencode. С точки зрения переносимости, я бы использовал uuencode, за которым следовал бы Perl, а затем openssl (если вы заботитесь о повторном использовании кода на как можно большем количестве других UNIX-подобных платформ, таких как стоковые). Будьте осторожны, потому что не все UNIX-варианты поддерживают ключ -m (iirc AIX поддерживает, HP/UX поддерживает, Solaris нет).

$ 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

Используйте ключ -m в uuencode file_in. txt для base64, как указано в RFC1521 и запишите его в filename.b64 (с указанием filename_when_uudecoded.txt в качестве имени файла по умолчанию при декодировании):

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

Пример STDIN:

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
```.
5
5
5
2016-07-12 15:39:22 +0000

Вы также можете подключить его прямо к буферу обмена (по крайней мере, на Mac):

openssl base64 -in [filename] | pbcopy.

3
3
3
2014-06-17 10:00:25 +0000

В настоящее время Python

Python предустановлен на всех макросах.

В терминале запущен python (или ipython ).

Кодирование файла:

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

Декодирование файла:

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

Конечно, обе операции могут быть преобразованы в oneliner, но таким образом, это более читабельно.

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

Пропустив -out/-output... filename, вы получите stdout.

base64

Еще одна утилита ootb, присутствующая как в OSX, так и в 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
```.
2
2
2
2014-07-27 05:16:22 +0000

Почему-то echo -n <data> | openssl base64 добавил новую строку в середине моих базовых64 данных. Полагаю, это связано с тем, что мои базовые64 данные были очень длинными.

Использование echo -n <data> | base64 для кодирования и echo -n <base64-ed data> | base64 -D для декодирования работало нормально.

2
2
2
2013-04-04 20:12:06 +0000
uuencode -m [-o output_file] [file] name

Где name - имя для отображения в закодированном заголовке.

Пример:

или

cat docbook-xsl.css | uuencode -m docbook-xsl.css
2
2
2
2016-07-27 18:14:32 +0000

В дополнение к ответу Стива Фолли, приведенному выше, при шифровании в режиме stdin, чтобы избежать прохождения дополнительных новых строк, нажмите CTRL+D дважды, чтобы закончить ввод без дополнительных новых строк. На выходе будет отображаться сразу после той же строки.

Например:

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

Альтернативно можно использовать printf:

$ printf 'input' | openssl base64
aW5wdXQ=
$
1
1
1
2010-03-17 04:24:21 +0000

Есть Perl plus MIME::Base64:

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

Это поставляется предустановленным. Вы можете указать отдельные файлы в командной строке (или предоставить данные на стандартном входе); каждый файл имеет отдельную кодировку. Вы также можете сделать:

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

Это копирует файл 1 в file1.txt и записывает вывод в кодировке Base-64 поверх оригинального файла.

1
1
1
2016-04-18 22:13:21 +0000
1
1
1
2010-03-17 00:00:24 +0000

Перекодировка должна выполнить за вас

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

перекодировка доступна для OS X через MacPorts .

1
1
1
2019-07-08 16:00:26 +0000

Кросс-платформенные решения

Мы скомпилировали список кросс-платформенных команд оболочки для кодирования файла в виде base64. Следующие команды берут входной файл (в примерах с именем deploy.key) и преобразовывают его в base64 без обёртывания newline. Вывод base64 выводится на терминал через stdout.

# 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

Чтобы перенаправить вывод в файл, добавьте > base64-encoded.txt (используя имя файла по вашему выбору).

Эти команды были прототипированы как часть этого pull request , где мы хотели, чтобы кроссплатформенные команды оболочки для base64 кодировали SSH приватный ключ для удаления новых строк.

1
1
1
2015-03-27 13:09:24 +0000

Простая версия NodeJS:

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

Похожие вопросы

12
7
5
15
2