Как раскодировать файл base64
Обновлено: 04.07.2024
Допустим, вам нужно передать по сети бинарный графический файл.
Каким должно быть решение, чтобы избежать такой проблемы?
Ответ кроется в кодировке Base64. В этой статье я собираюсь показать, как мы можем использовать Python для кодирования и декодирования двоичного изображения.
Программа, которую мы сегодня создадим, предполагает использование в качестве автономной локальной программы, но вы можете применять ее для различных концепций, таких как отправка закодированного изображения с мобильного устройства на сервер, и многих других приложений.
Что такое кодирование Base64?
Прежде чем перейти к этому, давайте определим, что мы подразумеваем под Base64.
Для чего мы используем Base64?
Base64 очень важен для отображения двоичных данных, настолько, что позволяет представлять двоичные данные так, что они выглядят и ведут себя как обычный текст. Это делает более безопасным их хранение в базах данных, отправку по электронной почте или использование в текстовых форматах, таких как XML.
Base64 в основном используется для представления данных в формате ASCII.
Как мы уже говорили во введении к этой статье, без Base64 данные вообще не могут быть прочитаны.
Кодирование Base64
Закодированные в Base64 данные в итоге оказываются больше исходных данных, поэтому, как мы уже говорили, на каждые 3 байта двоичных данных приходится как минимум 4 байта закодированных в Base64 данных. Это связано с тем, что вы сжимаете данные в меньший набор символов.
Вы когда-нибудь видели необработанный файл электронной почты, подобный тому, который показан ниже? Если да, то вы видели кодирование Base64 в действии.
Кодирование Base64 выполняется в несколько этапов:
- Текст, который необходимо закодировать, преобразуется в соответствующие десятичные значения, т.е. в его ASCII-эквивалент (например, a: 97, b: 98 и т.д.).
- Десятичные значения, полученные на предыдущем этапе, преобразуются в их двоичные эквиваленты (т.е. 97: 01100001).
- Все двоичные эквиваленты объединяются, в результате чего получается большой набор двоичных чисел.
- Большой набор двоичных чисел разделен на равные части. Каждая секция должна содержать только 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 символа |
---|---|
000000 | A |
000001 | B |
000010 | C |
000011 | D |
000100 | E |
000101 | F |
000110 | G |
000111 | H |
001000 | I |
001001 | J |
001010 | K |
001011 | L |
001100 | M |
001101 | N |
001110 | O |
001111 | P |
010000 | Q |
010001 | R |
010010 | S |
010011 | T |
010100 | U |
010101 | V |
010110 | W |
010111 | X |
011000 | Y |
011001 | Z |
011010 | a |
011011 | b |
011100 | c |
011101 | d |
011110 | e |
011111 | f |
100000 | g |
100001 | h |
100010 | i |
100011 | j |
100100 | k |
100101 | l |
100110 | m |
100111 | n |
101000 | o |
101001 | p |
101010 | q |
101011 | r |
101100 | s |
101101 | t |
101110 | u |
101111 | v |
110000 | w |
110001 | x |
110010 | y |
110011 | z |
110100 | 0 |
110101 | 1 |
110110 | 2 |
110111 | 3 |
111000 | 4 |
111001 | 5 |
111010 | 6 |
111011 | 7 |
111100 | 8 |
111101 | 9 |
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 символа |
---|---|
000000 | A |
000001 | B |
000010 | C |
000011 | D |
000100 | E |
000101 | F |
000110 | G |
000111 | H |
001000 | I |
001001 | J |
001010 | K |
001011 | L |
001100 | M |
001101 | N |
001110 | O |
001111 | P |
010000 | Q |
010001 | R |
010010 | S |
010011 | T |
010100 | U |
010101 | V |
010110 | W |
010111 | X |
011000 | Y |
011001 | Z |
011010 | a |
011011 | b |
011100 | c |
011101 | d |
011110 | e |
011111 | f |
100000 | g |
100001 | h |
100010 | i |
100011 | j |
100100 | k |
100101 | l |
100110 | m |
100111 | n |
101000 | o |
101001 | p |
101010 | q |
101011 | r |
101100 | s |
101101 | t |
101110 | u |
101111 | v |
110000 | w |
110001 | x |
110010 | y |
110011 | z |
110100 | 0 |
110101 | 1 |
110110 | 2 |
110111 | 3 |
111000 | 4 |
111001 | 5 |
111010 | 6 |
111011 | 7 |
111100 | 8 |
111101 | 9 |
111110 | + |
111111 | - |
Например, если вы конвертируете «Hello» с помощью Base64, это будет следующим образом.
1. Сделайте это двоичным представлением.
2. Разделять каждые 6 бит. Если он меньше 6 бит, дополните его "0" в конце.
3. Преобразуйте в символы с помощью таблицы преобразования. Преобразуйте каждые 4 символа, и если оно меньше 4 символов, дополните конец знаком «=».
4. Соедините все символы, чтобы получить результат преобразования Base64.
Читайте также: