Как закодировать файл в base64

Обновлено: 06.07.2024

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

Имейте в виду , что , хотя base64 кодирующая синтаксис согласуется с одной ОС на другую, синтаксис base64-декодирование либо base64 -d или в base64 -D зависимости от вашей операционной системы. OSX использует -D . @ChrisJohnson Если используется совместно с openssl флагом для декодирования -d на OS X (10.10 Yosemite).

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

Без -in опции читает из стандартного ввода

Используйте openssl base64 < path/to/file.jpg | tr -d '\n' | pbcopy или, cat path/to/file.jpg | openssl base64 | tr -d '\n' | pbcopy чтобы пропустить запись в файл и просто скопировать вывод в кодировке base64 в буфер обмена без разрывов строк. В Mac, чтобы Base64 кодировать строку: openssl base64 -e <<< ram и декодировать: openssl base64 -d <<< cmFtCg== @Ram, openssl base64 -e <<< ram фактически кодирует 4 байта, включая перевод строки в конце; см hexdump <<< ram .

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

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

Однако решение "echo" добавляет символ LF (перевод строки) в конец строки ввода. Лучшее использование: echo -n 'input' И даже немного более кратким openssl base64 <<< input Или просто использовать base64 без openssl . В любом случае мне нужно дважды нажать Ctrl + D. И будьте осторожны, @Garret: в Bash, с или без openssl , openssl base64 <<< superuser и openssl base64 <<< "superuser" ошибочно возвращаются c3VwZXJ1c2VyCg== , поскольку «здесь строка» тогда все еще включает перевод строки! ( Очевидно, не только в Bash, но также в zsh, ksh и yash. См hexdump <<< superuser . Результат Base64 должен быть c3VwZXJ1c2Vy .)

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

Добавьте, --decode чтобы полностью изменить процесс от base64 к нормальному. Это лучше для кодирования SVG, потому что он создает одну строку. Это чище, чем на выходе openssl base64 . Спасибо!

base64 команда доступна по умолчанию на моем OS X 10.9.4.

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

У вас есть пример? Я получаю Invalid characer in input stream при использовании <<< . Я пытался с " , ' и ничего вокруг строки. @Jonas В какой ты скорлупе? Вы можете использовать это в bash и zsh.

Поскольку Python поставляется с OS X по умолчанию, вы можете использовать его, как показано ниже:

Или установите coreutils через Brew ( brew install coreutils ), которая будет предоставлять base64 команду:

В macOS я всегда использую:

echo -n "STRING" | base64

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

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

о base64

В следующей статье мы рассмотрим как мы можем кодировать и декодировать с терминала с помощью base64. Кодирование - это процесс, используемый для преобразования данных в формат, необходимый для эффективной передачи или хранения. Напротив, декодирование - это противоположность методу кодирования, который преобразует закодированные данные в их исходный формат. Base64 - это процесс кодирования, при котором двоичные данные преобразуются в ASCII..

Кодирование Base64 в основном используется, чтобы избежать проблем с передачей., которые возникают, когда двоичные данные передаются в текстовые системы, которые не могут правильно обрабатывать эти двоичные данные. В результате информация теряется или искажается во время передачи.

База 64 - это позиционная система нумерации, в которой 64 используется в качестве основы.. Это наивысшая степень, которую можно представить, используя только печатаемые символы ASCII. Это привело к его использованию для шифрования электронной почты, PGP и других приложений. Все известные варианты, которые называются Base64, используют диапазон символов AZ, az и 0-9 в этом порядке для первых 62 цифр, но символы, выбранные для последних двух цифр, значительно различаются от одного к другому. Некоторые из вариантов использования шифрования: сжатие данных, скрытие данных или передача данных в другом формате.

В следующих строках мы увидим как использовать команду base64 для кодирования и декодирования данных в строке или файле. Для выполнения этого примера я собираюсь использовать терминал (Ctrl + Alt + T) системы Ubuntu 20.04 Focal Fossa.

Синтаксис для кодирования с использованием Base64

опции

справка по base64

Некоторые варианты Командная строка, которую можно использовать с командой base64:

  • -Помогите → Мы будем использовать эту опцию, чтобы показать справку по использованию base64.
  • -do –decode → Мы будем использовать эту опцию, чтобы декодировать файл или строку.
  • -i, –ignore-garbage → Эта опция поможет нам, пока мы декодируем игнорировать небуквенные символы.
  • -версия → Другой вариант показать информацию о версии, которую мы используем.

Кодировка строк с помощью Base64

Пользователи могут закодировать строку с помощью команды base64. Команда для использования будет следующей:

закодировать образец текста

Эта команда будет кодировать текст в строке, используя base64, и печатать закодированный текст на стандартный вывод.

Мы также можем сохранить закодированный вывод в файл, вместо вывода на стандартный вывод. Следующая команда закодирует текст и сохранит результат в файл с именем "encodedfile.txt«:

текст внутри файла base64

к просмотреть содержимое закодированного файла, мы можем использовать команду кошка, как вы можете видеть на предыдущем снимке.

Строка декодирования

Мы можем декодировать текст в кодировке base64 с помощью опции –decode или -d. Для декодирования текста в кодировке base64 '4oCcdGV4dG8gZGUgZWplbXBsb + KAnQo =', команда будет такой:

расшифровать образец текста

Эта команда напечатает исходный текст на стандартный вывод как показано на скриншоте выше.

Мы также сможем сохранить декодированный вывод в файл, а не на стандартный вывод. Следующая команда декодирует закодированный текст и сохранит исходный текст в файле с именем "Расшифрованный файл .txt"

текст внутри файла, декодированного в формате base64

к просмотреть содержимое декодированного файла, мы можем использовать команду кошка.

Кодирование текстового файла

Команда base64 также можно использовать для кодирования текстового файла. Если бы нас интересовало кодирование текстового файла с именем 'archivotext.txt', используйте следующую команду:

кодировка текстового файла

Эта команда закодирует указанный текстовый файл и распечатает его закодированную форму на стандартный вывод.

также мы можем сохранить закодированный вывод в файл, а не выводить его на стандартный вывод. Следующая команда преобразует текст в файле с помощью base64 и сохранит вывод в другой файл с именем "encodedfile.txt »:

файл в кодировке base64

к просмотреть содержимое закодированного файла, мы можем использовать команду кошка.

Расшифровать текстовый файл

к декодировать закодированный текстовый файл, нам нужно будет использовать параметр –decode или -d. Чтобы декодировать содержимое текстового файла в кодировке base64 'закодированный файл .txt', используйте следующую команду:

декодировать содержимое текстового файла

Эта команда декодирует текстовый файл в кодировке base64 и распечатает исходный текст на стандартный вывод.

Мы также сможем сохранить декодированный вывод в файл, а не на стандартный вывод. Следующая команда декодирует закодированный текст и сохранит исходный текст в файле с именем "decodedfile.txtЧто можно будет просмотреть позже с помощью команды кошка:

декодировать текстовый файл

Вот как вы можете использовать base64 для кодирования и декодирования строки или файла с терминала. Важно помнить, что кодировка не похожа на шифрование, и можно легко выявить закодированные данные. По этой причине не рекомендуется использовать шифрование для передачи конфиденциальных данных., Больше информации о Википедия.

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Убунлог » Ubuntu » Кодирование и декодирование Base64 из командной строки

Александр Терехов
дата публикации 17-10-2002 13:16

Вступление

Изначально для передачи электронной почты в Интернет использовался только текст (RFC822). Затем, с развитием компьютерных девайсов, потребовалась возможность передачи нетекстовой информации: аудио, видео, графических файлов, файлов приложений и т.д. Однако почтовые сервера как понимали только текст, так и остались понимать только его. Поэтому появилась необходимость каким-то образом преобразовать двоичный файл в текстовый. Вообще-то способ такого преобразования уже имел место - это UUE кодирование. Но появился еще один - base64. Этот способ используется в спецификации MIME (RFC2045-2049).

Идеология base64

Как известно, байт состоит из восьми битов :)
В один байт можно вложить 256 цифр, от 0 до 255. Однако, если вместо восьми байт использовать только шесть, то объем вложенной информации уменьшается до 64 цифр, от 0 до 63. Теперь главное: любую цифру 6-ти битового байта можно представить в виде печатного символа. 64 символа это не так много, us-ascii символов вполне хватит. Ниже представлен 64-х символьный base64 "алфавит". где код символа A - 0, а код символа / - 63.

Вроде, понятно. Что дальше?

А далее берутся три последовательных байта по восемь бит (всего 24 бита), и побитно делятся на четыре 6-ти битных байта (всего 24 бита).
Немного странно звучит: "шестибитный байт". На самом деле бит восемь, однако используются только 6 младших бит, два старших бита игнорируются.
Схематично такое "деление три к четырем" можно представить себе так:

В приведенном примере три числа 103, 193 и 58 были закодированы в base64 формат. В результате мы получили 4-х символьный стринг Z8E6. Т.о. на практике увидели идеологию перевода двоичной информации в текст по принципу 3 к 4.

Основываясь на этом принципе, мы можем закодировать любую двоичную информацию в текст, причем не очень сильно увеличивая ее объем (на 30%). Затем наша информация через почтовый сервер попадет к нужному адресату, почтовик которого декодирует текст в двоичный файл.

Все довольны, все смеются.
"Но..", скажите Вы, - "что делать, если у нас нет трех байтов? Есть только один или два!" В этом случае в конец четырех символьного стринга добавляется символ = (равно). Если не хватает (до трех) одного байта, то добавляется один символ "равно": если не хватает двух байт, то добавляются два символа "равно": Что радует: с символами "равно" надо разбираться только один раз - при чтении конца файла.
На этом вроде бы все.

Нет, еще не все. Формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится).

  1. Имеющейся почтовой программой сохранить в файл какое-нибудь письмо. Письмо, естественно, надо выбрать со вложенным файлом. При сохранении письма, тип файла следует выбрать "почтового формата" (e-mail message), например *.msg или *.eml
  2. Включить самый мощный текстовый редактор - Notepad ("Блокнот") и открыть сохраненный файл письма. Тем, у кого п.2 не получился с первого раза - тип файла при открытии его "Блокнотом" надо указать "Все файлы" (*.*)
  3. В "Блокноте" (а если файл большой, то в WordPad'е) откроется примерно нижеследующее:

Полный текст можно посмотреть в файле EMail.txt.

Алгоритм base64 кодирования и декодирования.

Рассмотрим шаг 1.

Как видно из приведенной схемы, проверить установку старшего бита совсем несложно. Если результатом операции получается число 128, значит бит установлен, а если в результате получаем 0, значит старший бит не установлен. Далее в зависимости от полученного результата применим к 6-ти битовому байту битовую операцию OR с числом 1, которая в любом случае применения устанавливает первый (младший) байт в 1. Здесь необходимо учитывать то, что перед применением побитовой операции OR с числом 1 младший бит 6-ти битового байта всегда 0. В случае для первых двух шагов потому, что мы сами обнуляем его при инициализации, для последующих шагов, потому что применяем операцию SHR.

Итак, посмотрим как выглядит реализация первого шага в Паскале:

Повторяем шаги 1 и 2 шесть раз для каждого бита 6-ти битного байта. Одновременно необходимо следить за тем, что если мы обработали восемь бит байта-источника, следует перейти к новому байту. И последнее - если обработаны все три байта-источники, следует выйти из функции кодирования.

Теперь о декодировании.

Примеры.

В первом примере ( b64_Example1 5К) показана работа модуля base64-кодирования (декодирования). Три восьмибитных байта кодируются в 4-х символьный стринг и обратно. Понятно, что это всего лишь пример и при вводе цифр и букв следует соблюдать base64-алфавит.

Конечно, при кодировании надо считывать по 58 байт, а не по 3, как это сделано в примере. Считывание по 58 байт значительно увеличит "скорострельность" утилиты. Но следует учитывать, что это всего лишь пример.

Пример очередного изобретения велосипеда :)

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Александр Терехов
дата публикации 17-10-2002 13:16

Вступление

Изначально для передачи электронной почты в Интернет использовался только текст (RFC822). Затем, с развитием компьютерных девайсов, потребовалась возможность передачи нетекстовой информации: аудио, видео, графических файлов, файлов приложений и т.д. Однако почтовые сервера как понимали только текст, так и остались понимать только его. Поэтому появилась необходимость каким-то образом преобразовать двоичный файл в текстовый. Вообще-то способ такого преобразования уже имел место - это UUE кодирование. Но появился еще один - base64. Этот способ используется в спецификации MIME (RFC2045-2049).

Идеология base64

Как известно, байт состоит из восьми битов :)
В один байт можно вложить 256 цифр, от 0 до 255. Однако, если вместо восьми байт использовать только шесть, то объем вложенной информации уменьшается до 64 цифр, от 0 до 63. Теперь главное: любую цифру 6-ти битового байта можно представить в виде печатного символа. 64 символа это не так много, us-ascii символов вполне хватит. Ниже представлен 64-х символьный base64 "алфавит". где код символа A - 0, а код символа / - 63.

Вроде, понятно. Что дальше?

А далее берутся три последовательных байта по восемь бит (всего 24 бита), и побитно делятся на четыре 6-ти битных байта (всего 24 бита).
Немного странно звучит: "шестибитный байт". На самом деле бит восемь, однако используются только 6 младших бит, два старших бита игнорируются.
Схематично такое "деление три к четырем" можно представить себе так:

В приведенном примере три числа 103, 193 и 58 были закодированы в base64 формат. В результате мы получили 4-х символьный стринг Z8E6. Т.о. на практике увидели идеологию перевода двоичной информации в текст по принципу 3 к 4.

Основываясь на этом принципе, мы можем закодировать любую двоичную информацию в текст, причем не очень сильно увеличивая ее объем (на 30%). Затем наша информация через почтовый сервер попадет к нужному адресату, почтовик которого декодирует текст в двоичный файл.

Все довольны, все смеются.
"Но..", скажите Вы, - "что делать, если у нас нет трех байтов? Есть только один или два!" В этом случае в конец четырех символьного стринга добавляется символ = (равно). Если не хватает (до трех) одного байта, то добавляется один символ "равно": если не хватает двух байт, то добавляются два символа "равно": Что радует: с символами "равно" надо разбираться только один раз - при чтении конца файла.
На этом вроде бы все.

Нет, еще не все. Формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится).

  1. Имеющейся почтовой программой сохранить в файл какое-нибудь письмо. Письмо, естественно, надо выбрать со вложенным файлом. При сохранении письма, тип файла следует выбрать "почтового формата" (e-mail message), например *.msg или *.eml
  2. Включить самый мощный текстовый редактор - Notepad ("Блокнот") и открыть сохраненный файл письма. Тем, у кого п.2 не получился с первого раза - тип файла при открытии его "Блокнотом" надо указать "Все файлы" (*.*)
  3. В "Блокноте" (а если файл большой, то в WordPad'е) откроется примерно нижеследующее:

Полный текст можно посмотреть в файле EMail.txt.

Алгоритм base64 кодирования и декодирования.

Рассмотрим шаг 1.

Как видно из приведенной схемы, проверить установку старшего бита совсем несложно. Если результатом операции получается число 128, значит бит установлен, а если в результате получаем 0, значит старший бит не установлен. Далее в зависимости от полученного результата применим к 6-ти битовому байту битовую операцию OR с числом 1, которая в любом случае применения устанавливает первый (младший) байт в 1. Здесь необходимо учитывать то, что перед применением побитовой операции OR с числом 1 младший бит 6-ти битового байта всегда 0. В случае для первых двух шагов потому, что мы сами обнуляем его при инициализации, для последующих шагов, потому что применяем операцию SHR.

Итак, посмотрим как выглядит реализация первого шага в Паскале:

Повторяем шаги 1 и 2 шесть раз для каждого бита 6-ти битного байта. Одновременно необходимо следить за тем, что если мы обработали восемь бит байта-источника, следует перейти к новому байту. И последнее - если обработаны все три байта-источники, следует выйти из функции кодирования.

Теперь о декодировании.

Примеры.

В первом примере ( b64_Example1 5К) показана работа модуля base64-кодирования (декодирования). Три восьмибитных байта кодируются в 4-х символьный стринг и обратно. Понятно, что это всего лишь пример и при вводе цифр и букв следует соблюдать base64-алфавит.

Конечно, при кодировании надо считывать по 58 байт, а не по 3, как это сделано в примере. Считывание по 58 байт значительно увеличит "скорострельность" утилиты. Но следует учитывать, что это всего лишь пример.

Пример очередного изобретения велосипеда :)

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Читайте также: