java кодирование в base64
Базовый тип Base64 Кодирование и декодирование в Java
Базовое кодирование означает, что к выходу не добавляются переводы строк, а вывод отображается на набор символов в наборе символов A-Za-z0-9 + /, и декодер отклоняет любой символ за пределами этого набора.
Кодировать простую строку в формат Basic Base 64
String BasicBase64format= Base64.getEncoder().encodeToString(“actualString”.getBytes());
Объяснение: В приведенном выше коде мы вызвали Base64.Encoder с помощью getEncoder (), а затем получили закодированную строку, передав в качестве параметра значение байта actualString в методе encodeToString ().
Декодировать базовый формат Base 64 в строку
byte[] actualByte= Base64.getDecoder().decode(encodedString);
String actualString= new String(actualByte);
Объяснение: В приведенном выше коде мы вызывали Base64.Decoder с использованием getDecoder (), а затем декодировали строку, переданную в метод decode () в качестве параметра, и затем преобразовывали возвращаемое значение в строку.
Ниже программы иллюстрируют кодирование и декодирование в Java:
Программа 1: Кодирование простой строки в формат Basic Base 64
// Java-программа для демонстрации
// Кодировать простую строку в формат Basic Base 64
public static void main(String[] args)
// создаем образец String для кодирования
String sample = «India Team will win the Cup» ;
// печатать фактическую строку
System.out.println( «Sample String:\n»
// Кодируем в формат Base64
// распечатать закодированную строку
System.out.println( «Encoded String:\n»
Программа 2. Декодирование базового формата Base 64 в строку
// Java-программа для демонстрации
// Декодирование базового формата Base 64 в строку
public static void main(String[] args)
// создаем закодированную строку для декодирования
// распечатать закодированную строку
System.out.println( «Encoded String:\n»
// декодировать в строку из закодированного формата
byte [] actualByte = Base64.getDecoder()
String actualString = new String(actualByte);
Кодирование и декодирование Java Base64
Как сделать кодирование и декодирование 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
Давайте начнем с рассмотрения базового процесса кодирования.
2.1. Java 8 Basic Base64
Базовый кодер упрощает работу и кодирует вход как есть, без какого-либо разделения строк.
Выходные данные отображаются на набор символов в A-Za-z0-9+/ набор символов, и декодер отклоняет любой символ за пределами этого набора.
Давайте сначала закодируем простую строку :
Обратите внимание, как мы получаем полный API кодировщика с помощью простого метода GetEncoder() utility.
Теперь давайте расшифруем эту строку обратно в исходную форму:
2.2. Кодировка Java 8 Base64 Без Заполнения
В кодировке Base64 длина выходной кодированной строки должна быть кратна трем. Если нет, то вывод будет дополнен дополнительными символами pad ( = ).
Если нам нужно пропустить заполнение вывода — возможно, потому, что результирующая строка никогда не будет декодирована обратно — мы можем просто выбрать кодирование без заполнения :
2.3. Кодировка URL-адресов Java 8
Кодировка URL-адресов очень похожа на базовый кодер, который мы рассмотрели выше. Он использует безопасный алфавит Base64 URL и имени файла и не добавляет никакого разделения строк:
2.4. Кодировка MIME Java 8
Давайте начнем с создания некоторого базового ввода MIME для кодирования:
Кодер MIME генерирует выходные данные в кодировке Base64, используя базовый алфавит, но в удобном для MIME формате.
Каждая строка вывода содержит не более 76 символов и заканчивается возвратом каретки, за которым следует перевод строки ( \r\n ):
3. Кодирование/Декодирование С Использованием Кодека Apache Commons
Во-первых, нам нужно определить зависимость commons-codec в pom.xml :
После создания API Base64 и кодирование, и декодирование довольно просты:
Метод decode() класса Base64 возвращает декодированную строку:
Другим простым вариантом является использование статического API Base64 |/вместо создания экземпляра:
4. Преобразование строки в массив байтов
Лучше также обеспечить кодировку и не зависеть от кодировки по умолчанию, так как она зависит от системы:
Если наша строка Base64 закодирована, мы можем использовать декодер Base64 |:
Мы также можем использовать DatatypeConverter parseBase64Binary() метод :
Наконец, мы можем преобразовать шестнадцатеричную строку в байт[] с помощью метода DatatypeConverter :
5. Заключение
В этой статье объясняются основы кодирования и декодирования Base64 в Java с использованием новых API, представленных в Java 8 и Apache Commons.
Java 8 — Base64
С Java 8, Base64 наконец-то получил свое. Java 8 теперь имеет встроенный кодер и декодер для кодирования Base64. В Java 8 мы можем использовать три типа кодировки Base64.
Простой — вывод сопоставляется с набором символов, лежащих в A-Za-z0-9 + /. Кодер не добавляет какой-либо перевод строки в вывод, а декодер отклоняет любой символ, кроме A-Za-z0-9 + /.
URL — вывод сопоставляется с набором символов, лежащих в A-Za-z0-9 + _. Вывод URL и имя файла безопасны.
MIME — Выходные данные отображаются в формате MIME. Вывод представлен в строках длиной не более 76 символов и использует возврат каретки ‘\ r’, за которым следует перевод строки \ n в качестве разделителя строк. В конце закодированного вывода отсутствует разделитель строк.
Простой — вывод сопоставляется с набором символов, лежащих в A-Za-z0-9 + /. Кодер не добавляет какой-либо перевод строки в вывод, а декодер отклоняет любой символ, кроме A-Za-z0-9 + /.
URL — вывод сопоставляется с набором символов, лежащих в A-Za-z0-9 + _. Вывод URL и имя файла безопасны.
MIME — Выходные данные отображаются в формате MIME. Вывод представлен в строках длиной не более 76 символов и использует возврат каретки ‘\ r’, за которым следует перевод строки \ n в качестве разделителя строк. В конце закодированного вывода отсутствует разделитель строк.
Вложенные классы
статический класс Base64. Декодер
Этот класс реализует декодер для декодирования байтовых данных с использованием схемы кодирования Base64, как указано в RFC 4648 и RFC 2045.
статический класс Base64.Encoder
Этот класс реализует кодер для кодирования байтовых данных с использованием схемы кодирования Base64, как указано в RFC 4648 и RFC 2045.
статический класс Base64. Декодер
Этот класс реализует декодер для декодирования байтовых данных с использованием схемы кодирования Base64, как указано в RFC 4648 и RFC 2045.
статический класс Base64.Encoder
Этот класс реализует кодер для кодирования байтовых данных с использованием схемы кодирования Base64, как указано в RFC 4648 и RFC 2045.
методы
статический Base64.Decoder getDecoder ()
Возвращает Base64.Decoder, который декодирует, используя схему кодирования base64 типа Basic.
статический Base64.Encoder getEncoder ()
Возвращает Base64.Encoder, который кодирует, используя схему кодирования base64 типа Basic.
статический Base64.Decoder getMimeDecoder ()
Возвращает Base64.Decoder, который декодирует, используя схему декодирования base64 MIME-типа.
статический Base64.Encoder getMimeEncoder ()
Encoding as Base64 in Java
I need to encode some data in the Base64 encoding in Java. How do I do that? What is the name of the class that provides a Base64 encoder?
I tried to use the sun.misc.BASE64Encoder class, without success. I have the following line of Java 7 code:
I’m using Eclipse. Eclipse marks this line as an error. I imported the required libraries:
But again, both of them are shown as errors. I found a similar post here.
I used Apache Commons as the solution suggested by including:
and importing the JAR files downloaded from: http://commons.apache.org/codec/
But the problem still exists. Eclipse still shows the errors previously mentioned. What should I do?
19 Answers 19
You need to change the import of your class:
And then change your class to use the Base64 class.
Here’s some example code:
Update (2016-12-16)
You can now use java.util.Base64 with Java 8. First, import it as you normally do:
Then use the Base64 static methods as follows:
If you directly want to encode string and get the result as encoded string, you can use this:
Use Java 8’s never-too-late-to-join-in-the-fun class: java.util.Base64
In Java 8 it can be done as: Base64.getEncoder().encodeToString(string.getBytes(StandardCharsets.UTF_8))
Here is a short, self-contained complete example:
Google Guava is another choice to encode and decode Base64 data:
POM configuration:
Sample code:
Eclipse gives you an error/warning because you are trying to use internal classes that are specific to a JDK vendor and not part of the public API. Jakarta Commons provides its own implementation of base64 codecs, which of course reside in a different package. Delete those imports and let Eclipse import the proper Commons classs for you.
Here are my two cents. Java 8 does contain its own implementation of Base64. However, I found one slightly disturbing difference. To illustrate, I will provide a code example:
My codec wrapper:
Test Class:
OUTPUT:
Notice that the Apache encoded text contain additional line breaks (white spaces) at the end. Therefore, in order for my codec to yield the same result regardless of Base64 implementation, I had to call trim() on the Apache encoded text. In my case, I simply added the aforementioned method call to the my codec’s apacheDecode() as follows:
Once this change was made, the results are what I expected to begin with:
CONCLUSION: If you want to switch from Apache Base64 to Java, you must:
If you switch without following these steps, most likely you will run into problems. That is how I made this discovery.
Кодирование и декодирование строк Base64 в Java
В этом уроке мы будем кодировать и декодировать строки Base64 на Java с примерами. Мы также выполним кодировку Base64 с помощью Apache Commons.
Вступление
Кодирование окружает нас повсюду, и компьютеры в значительной степени полагаются на различные форматы кодирования для доставки и передачи информации.
От последнего изображения кошки в вашей ленте до голосового сообщения, которое вы прослушали через приложение для обмена сообщениями, – все это было закодировано на стороне отправителя, доставлено вам и декодировано на стороне получателя.
Кодирование гарантирует, что данные останутся нетронутыми и эффективными для транспортировки.
Что такое Base64?
Хотя это в какой-то степени “скрывает” данные, это ни в коем случае не безопасный формат.
Как Работает Base64?
В Base64, как следует из названия, для кодирования двоичных данных используется 64 символа. Эти персонажи являются:
Давайте продолжим и вручную закодируем простую строку, чтобы получить хорошее представление о том, как работает этот процесс.
Кодирование вручную
Переупорядочьте двоичные числа в блоки по 6 бит:
010000 010100 001001 000011 001100 010011 001000 110011
Если невозможно разбить его на шесть частей, мы должны дополнить последовательность.
Получите десятичные значения этих двоичных фрагментов:
Примечание: 6 входных символов в конце кодируются в 8 символов. Это означает, что для хранения строки в кодировке Base64 требуется на
33% больше места, чем для исходной строки.
Зачем использовать кодировку Base64?
Компьютеры работают с 0 s и 1 s, так зачем беспокоиться о преобразовании этого в другой формат?
Да, это правда. Двоичный является языком компьютеров. Вот именно поэтому мы его преобразуем. Последовательность, такая как 0010110 это может означать многое. Это может быть часть изображения, это может быть часть аудиофайла или это может быть команда, которая удаляет половину вашего жесткого диска.
Эти данные должны обрабатываться по-разному, в зависимости от того, что они должны представлять. Кроме того, многие серверы не ожидают необработанных двоичных данных. Например, серверы электронной почты ожидают текстовые данные. Все электронные письма кодируются до того, как приложения отправят их.
Кодирование строк с помощью Java 8 – Base64
Базовое кодирование и декодирование строк
Используя базовый кодер, мы можем закодировать строку в Base64. Базовый кодировщик не добавляет символ разделителя строк.
Если длина строки не делится на 3 (8-разрядное представление не сможет объединяться в 6-разрядные группы), в конце будет добавлено дополнение в виде = :
Base64 – это заводской класс, из которого мы будем извлекать различные реализации/варианты кодера. Метод encodeToString() закодирует ваши входные данные в представление входных данных Base64 и упакует их в строку. Вы также можете использовать метод encode() для кодирования его в байт поток или байтбуфер вместо этого.
При необходимости вы также можете вернуть экземпляр кодировщика, который не будет заполнять входные строки с помощью метода без заполнения() при создании экземпляра из заводского класса:
Примечание: Кодирование без заполнения, скорее всего, приведет к строке Base64, которая не может быть декодирована обратно, так как часть информации потеряна.
Выполнение примера кода приведет к:
С нашей закодированной строкой давайте также создадим экземпляр Декодера и декодируем полученную строку. Однако декодеры работают только с массивами байт :
Этот код приведет к:
Кодирование и декодирование URL-адресов
Мы получаем их с помощью методов getUrlEncoder() и getUrlDecoder() через Base64 завод:
Как и раньше, метод encodeToString() будет кодировать входные данные и упаковывать их в строку:
Выполнение этого кода дает:
Кодирование и декодирование MIME
Универсальное расширение интернет-почты (MIME) метки используются для идентификации типа носителя (HTML, аудио, видео).
Поскольку многие типы носителей, такие как изображения, документы и т.д., Отправляются в виде вложений по электронной почте, необходимо кодировать их в формате, приемлемом для всех протоколов.
Давайте создадим файл под названием file.txt который содержит:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Естественно, расшифровать этот контент так же просто, как:
Apache Commons
Из-за его полезности и распространенности в Java многие проекты включают Apache Commons в путь к классам. Это отличная библиотека со множеством полезных функций, часто используемых в производстве, и кодирование/декодирование не является исключением.
Используя Maven, добавить его в свой проект так же просто, как включить зависимость:
Или, если вы используете Gradle:
Базовое кодирование и декодирование строк Apache Commons
Запуск этого кода приведет к:
Запуск этого кода приведет к:
В том же духе класс Base64 также используется в качестве декодера. Он принимает байт массив или строку и возвращает байт массив:
Запуск этого кода приведет к:
Кодирование и декодирование URL-адресов Apache Commons
Кодирование и декодирование URL-адресов выполняется по тому же принципу:
Выполнение этого приведет к:
Вы также можете вернуть строку вместо байта массива:
Содержимое кодированной строки является:
И, наконец, мы также можем декодировать представление URL-адреса Base64:
Кодирование и декодирование MIME в Apache Commons
Кодирование и декодирование типов MIME немного отличается от официальной реализации Java. На этот раз мы используем метод encodeBase64Chunked() :
Этот код приводит к:
Расшифровка такая же, как и раньше:
Этот код приводит к:
Вспомогательные методы Apache Commons
В истинной манере Apache Commons мы познакомились с несколькими вспомогательными методами, которые немного облегчают нашу жизнь. Например, мы можем проверить, находится ли строка или массив байт в допустимой базе 64:
Этот код приведет к:
Мы можем проверить, находимся ли мы в безопасном для URL режиме или нет:
И, наконец, мы можем проверить, соответствует ли каждый отдельный байт из нашего массива алфавиту Base64:
Вывод
В этой статье мы углубились в то, что такое кодирование и декодирование, а затем в обзор Base64. Мы вручную закодировали строку, чтобы лучше понять процесс, перед многими примерами кода.
Использование класса Base64 в Java позволяет нам создавать различные типы кодеров и декодеров, оптимизированных для кодирования и декодирования базовых строк, URL – адресов и типов MIME.



