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

Обновлено: 04.07.2024

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

Каким должно быть решение, чтобы избежать такой проблемы?

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

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

Что такое кодирование Base64?

Прежде чем перейти к этому, давайте определим, что мы подразумеваем под Base64.

Для чего мы используем Base64?

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

Base64 в основном используется для представления данных в формате ASCII.

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

Кодирование Base64

Закодированные в Base64 данные в итоге оказываются больше исходных данных, поэтому, как мы уже говорили, на каждые 3 байта двоичных данных приходится как минимум 4 байта закодированных в Base64 данных. Это связано с тем, что вы сжимаете данные в меньший набор символов.

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

Кодирование Base64 выполняется в несколько этапов:

  1. Текст, который необходимо закодировать, преобразуется в соответствующие десятичные значения, т.е. в его ASCII-эквивалент (например, a: 97, b: 98 и т.д.).
  2. Десятичные значения, полученные на предыдущем этапе, преобразуются в их двоичные эквиваленты (т.е. 97: 01100001).
  3. Все двоичные эквиваленты объединяются, в результате чего получается большой набор двоичных чисел.
  4. Большой набор двоичных чисел разделен на равные части. Каждая секция должна содержать только 6 бит.
  5. Равные наборы из 6 битов преобразуются в их десятичные эквиваленты.
  6. Наконец, десятичные эквиваленты преобразуются в свои значения Base 64 (т.е. 4:E).

Декодирование Base64

Декодирование Base64 противоположно кодированию Base64. Другими словами, это делается путем обратных действий, описанных в предыдущем пункте.

Таким образом, этапы декодирования Base64 можно описать следующим образом:

Кодирование изображения

Для кодирования нашего изображения в Base64 нужно сделать следующее:

Если вы хотите увидеть результат процесса кодирования, введите следующее:

Декодирование изображения

Чтобы декодировать изображение с помощью Python, мы просто используем функцию base64.decodestring(s).

Таким образом, чтобы декодировать изображение, которое мы закодировали в предыдущем разделе, делаем следующее:

Собираем все вместе

Давайте соберем код, которая кодирует и декодирует изображение Base64.

Сохраните статью в социальных сетях, чтобы не потерять.

Похожие записи

Если вам нужно скопировать файл с помощью Python, но вы не знаете, как это сделать,…

Иногда нам нужно преобразовать Excel или CSV в другой формат, в этот раз мне нужно…

Python - очень универсальный язык, который позволяет автоматизировать множество задач. В этом уроке я покажу…

Как сделать кодирование и декодирование Base64 в Java, используя новые API, представленные в Java 8, а также Apache Commons.

1. Обзор

В этом уроке мы рассмотрим различные утилиты, которые предоставляют функции кодирования и декодирования Base64 в Java.

Мы в основном собираемся проиллюстрировать новые API Java 8 и служебные API, которые выходят из Apache Commons.

Дальнейшее чтение:

Руководство по кодированию/декодированию URL-адресов Java

Хеширование SHA-256 и SHA3-256 в Java

Новое Хранилище Паролей В Spring Security 5

2. Java 8 для базы 64

Java 8 наконец-то добавила возможности Base64 в стандартный API. Это делается через класс утилиты java.util.Base64 .

Давайте начнем с рассмотрения базового процесса кодирования.

2.1. Java 8 Basic Base64

Базовый кодер упрощает работу и кодирует вход как есть, без какого-либо разделения строк.

Выходные данные отображаются на набор символов в A-Za-z0-9+/ набор символов, и декодер отклоняет любой символ за пределами этого набора.

Давайте сначала закодируем простую строку :

Обратите внимание, как мы получаем полный API кодировщика с помощью простого метода GetEncoder() utility.

Теперь давайте расшифруем эту строку обратно в исходную форму:

2.2. Кодировка Java 8 Base64 Без Заполнения

В кодировке Base64 длина выходной кодированной строки должна быть кратна трем. Если нет, то вывод будет дополнен дополнительными символами pad ( = ).

После декодирования эти дополнительные символы заполнения будут отброшены. Чтобы углубиться в заполнение в Base64, ознакомьтесь с этим подробным ответом на Переполнение стека .

Если нам нужно пропустить заполнение вывода — возможно, потому, что результирующая строка никогда не будет декодирована обратно — мы можем просто выбрать кодирование без заполнения :

2.3. Кодировка URL-адресов Java 8

Кодировка URL-адресов очень похожа на базовый кодер, который мы рассмотрели выше. Он использует безопасный алфавит Base64 URL и имени файла и не добавляет никакого разделения строк:

Декодирование происходит во многом таким же образом. Метод утилиты getUrlDecoder() возвращает java.util.Base64.Decoder , который затем используется для декодирования URL-адреса:

2.4. Кодировка MIME Java 8

Давайте начнем с создания некоторого базового ввода MIME для кодирования:

Кодер MIME генерирует выходные данные в кодировке Base64, используя базовый алфавит, но в удобном для MIME формате.

Каждая строка вывода содержит не более 76 символов и заканчивается возвратом каретки, за которым следует перевод строки ( \r\n ):

Метод утилиты getMimeDecoder() возвращает java.util.Base64.Decoder , который затем используется в процессе декодирования:

3. Кодирование/Декодирование С Использованием Кодека Apache Commons

Во-первых, нам нужно определить зависимость commons-codec в pom.xml :

Обратите внимание, что мы можем проверить, были ли выпущены более новые версии библиотеки на Maven Central .

После создания API Base64 и кодирование, и декодирование довольно просты:

Метод decode() класса Base64 возвращает декодированную строку:

Другим простым вариантом является использование статического API Base64 |/вместо создания экземпляра:

4. Преобразование строки в массив байтов

Иногда нам нужно преобразовать Строку в байт[] . Самый простой способ сделать это-использовать метод String getBytes() :

Лучше также обеспечить кодировку и не зависеть от кодировки по умолчанию, так как она зависит от системы:

Если наша строка Base64 закодирована, мы можем использовать декодер Base64 |:

Мы также можем использовать DatatypeConverter parseBase64Binary() метод :

Наконец, мы можем преобразовать шестнадцатеричную строку в байт[] с помощью метода DatatypeConverter :

5. Заключение

В этой статье объясняются основы кодирования и декодирования Base64 в Java с использованием новых API, представленных в Java 8 и Apache Commons.

В Base64 данные делятся на 6 бит и преобразуются в буквенно-цифровые символы (A-Z, a-z, 0-9) и символы (+, /). Преобразует каждые 4 символа, а если последний меньше 4 символов, заполните его символом равенства (=).

Кроме того, RFC 1421 (PEM: Privacy-Enhanced Mail) предусматривает перерыв каждые 64 символа, а RFC 2045 (MIME) предусматривает перерыв каждые 76 символов.

Таблица преобразования для символов Base64 выглядит следующим образом.

5-битные данныеBase32 символа
000000A
000001B
000010C
000011D
000100E
000101F
000110G
000111H
001000I
001001J
001010K
001011L
001100M
001101N
001110O
001111P
010000Q
010001R
010010S
010011T
010100U
010101V
010110W
010111X
011000Y
011001Z
011010a
011011b
011100c
011101d
011110e
011111f
100000g
100001h
100010i
100011j
100100k
100101l
100110m
100111n
101000o
101001p
101010q
101011r
101100s
101101t
101110u
101111v
110000w
110001x
110010y
110011z
1101000
1101011
1101102
1101113
1110004
1110015
1110106
1110117
1111008
1111019
111110+
111111-

Например, если вы конвертируете «Hello» с помощью Base64, это будет следующим образом.

1. Сделайте это двоичным представлением.

2. Разделять каждые 6 бит. Если он меньше 6 бит, дополните его "0" в конце.

3. Преобразуйте в символы с помощью таблицы преобразования. Преобразуйте каждые 4 символа, и если оно меньше 4 символов, дополните конец знаком «=».

4. Соедините все символы, чтобы получить результат преобразования Base64.

В Base64 данные делятся на 6 бит и преобразуются в буквенно-цифровые символы (A-Z, a-z, 0-9) и символы (+, /). Преобразует каждые 4 символа, а если последний меньше 4 символов, заполните его символом равенства (=).

Кроме того, RFC 1421 (PEM: Privacy-Enhanced Mail) предусматривает перерыв каждые 64 символа, а RFC 2045 (MIME) предусматривает перерыв каждые 76 символов.

Таблица преобразования для символов Base64 выглядит следующим образом.

5-битные данныеBase32 символа
000000A
000001B
000010C
000011D
000100E
000101F
000110G
000111H
001000I
001001J
001010K
001011L
001100M
001101N
001110O
001111P
010000Q
010001R
010010S
010011T
010100U
010101V
010110W
010111X
011000Y
011001Z
011010a
011011b
011100c
011101d
011110e
011111f
100000g
100001h
100010i
100011j
100100k
100101l
100110m
100111n
101000o
101001p
101010q
101011r
101100s
101101t
101110u
101111v
110000w
110001x
110010y
110011z
1101000
1101011
1101102
1101113
1110004
1110015
1110106
1110117
1111008
1111019
111110+
111111-

Например, если вы конвертируете «Hello» с помощью Base64, это будет следующим образом.

1. Сделайте это двоичным представлением.

2. Разделять каждые 6 бит. Если он меньше 6 бит, дополните его "0" в конце.

3. Преобразуйте в символы с помощью таблицы преобразования. Преобразуйте каждые 4 символа, и если оно меньше 4 символов, дополните конец знаком «=».

4. Соедините все символы, чтобы получить результат преобразования Base64.

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