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

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся кодировать и декодировать данные в формате Base64 на Java с использованием класса java.util.Base64 и библиотеки Apache Commons.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/StringManipulationGroup -.-> java/strings("Strings") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("Class Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") java/FileandIOManagementGroup -.-> java/io("IO") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/strings -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/classes_objects -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/class_methods -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/packages_api -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/arraylist -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/create_write_files -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/io -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/object_methods -.-> lab-117389{{"Base64-кодирование и декодирование"}} java/string_methods -.-> lab-117389{{"Base64-кодирование и декодирование"}} end

Создайте новый Java-файл

В этом шаге вы создадите новый Java-файл. Откройте терминал и выполните следующую команду, чтобы создать новый Java-файл:

touch ~/project/Base64Encoding.java

Эта команда создаст новый файл с именем Base64Encoding.java внутри каталога ~/project. Вы можете использовать любое предпочтительное имя, но убедитесь, что оно заканчивается на .java.

Основная кодировка и декодировка

В этом шаге мы узнаем о основной кодировке и декодировке.

  • Основной кодировщик использует алфавит Base64 для кодирования и декодирования.
  • Он не добавляет никаких разделителей строк в закодированную строку.
  • Мы будем использовать метод getEncoder(), который возвращает простой Base64.Encoder.
  • Затем мы будем использовать метод encodeToString() для кодирования строки.

Для декодирования закодированной строки мы будем использовать Base64.Decoder, возвращаемый методом getDecoder().

  • Мы будем использовать метод decode() декодера.

Используйте следующий код для кодирования и декодирования строки:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Hello World";
        byte[] bytesToEncode = strToEncode.getBytes(); // преобразуем строку в массив байтов

        // Кодирование
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("Encoded String: " + encodedStr);

        // Декодирование
        byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decodedByteArr);
        System.out.println("Decoded String: " + decodedStr);
    }
}

Выполните следующую команду в терминале для компиляции и запуска кода:

javac Base64Encoding.java && java Base64Encoding

Base64-кодирование без дополнения

В предыдущем шаге мы увидели, что кодирование добавляет символы дополнения ( = ) в конце закодированной строки. В этом шаге мы узнаем, как кодировать без символов дополнения.

Используйте следующий код для кодирования строки без дополнения:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Java";
        byte[] bytesToEncode = strToEncode.getBytes(); // преобразуем строку в массив байтов

        // Кодирование без дополнения
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("Encoded String: " + encodedStr);
    }
}

Выполните следующую команду в терминале для компиляции и запуска кода:

javac Base64Encoding.java && java Base64Encoding

URL- и безопасное кодирование и декодирование имен файлов

В этом шаге мы узнаем о URL- и безопасном кодировании и декодировании имен файлов.

Класс Base64 обрабатывает URL-кодирование и декодирование с использованием URL- и безопасного Base64-алфавита.

  • Мы будем использовать метод getUrlEncoder(), чтобы получить URL-кодировщик Base64.
  • Затем мы будем использовать метод encodeToString(), как мы делали в предыдущем разделе.

Аналогично у нас есть метод getUrlDecoder(), который возвращает URL-декодер.

  • Мы можем использовать метод decode() с этим декодером для декодирования.

Используйте следующий код для кодирования и декодирования URL:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String urlToEncode = "https://go.java/?intcmp=gojava-banner-java-com";

        // Кодирование
        String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
        System.out.println("Encoded URL: " + encodedUrl);

        // Декодирование
        byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
        String decodedUrl = new String(decodedUrlBytes);
        System.out.print("Decoded URL: " + decodedUrl);
    }
}

Выполните следующую команду в терминале для компиляции и запуска кода:

javac Base64Encoding.java && java Base64Encoding

MIME-кодирование и декодирование

В этом шаге мы узнаем о MIME-кодировании и декодировании.

  • Класс Base64 использует Base64-алфавит для своих операций кодирования и декодирования.
  • В закодированном выводе каждая строка содержит максимум 76 символов.
  • Каждая строка заканчивается возвратом каретки( \r ), за которым следует перевод строки( \n ) в качестве разделителя строк.

Для кодирования мы можем использовать методы getMimeEncoder() и encodeToString().
Для декодирования мы будем использовать метод getMimeDecoder() для получения декодера, а затем метод decode().

Используйте следующий код для кодирования и декодирования данных MIME:

import java.util.Base64;
import java.util.UUID;

public class Base64Encoding {
    public static void main(String[] args) {
        // Создание MIME-инпута для кодирования
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // Кодирование
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("Encoded String: " + mimeEncodedStr);

        // Декодирование
        byte[] mimeDecodedBytes = Base64.getMimeDecoder().decode(mimeEncodedStr);
        String mimeDecodedStr = new String(mimeDecodedBytes);
    }
}

Выполните следующую команду в терминале для компиляции и запуска кода:

javac Base64Encoding.java && java Base64Encoding

Использование библиотеки Apache Commons

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

Библиотека Apache Commons предоставляет класс Base64 внутри пакета org.apache.commons.codec.binary.

  • Этот класс содержит пять различных конструкторов для различных схем кодирования.
  • После создания экземпляра Base64 мы можем использовать методы encode() и decode() для байтов строки для выполнения кодирования и декодирования.

Используйте следующий код для кодирования и декодирования строки с использованием класса Base64 Apache Commons:

import org.apache.commons.codec.binary.Base64;

public class Base64Encoding {
    public static void main(String[] args) {

        Base64 base64 = new Base64();

        // Кодирование
        String strToEncode = "Hello World";
        byte[] encodedBytes = base64.encode(strToEncode.getBytes());
        String encodedStr = new String(encodedBytes);
        System.out.println("Encoded String: " + encodedStr);

        // Декодирование
        byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
        String decodedStr = new String(decodedByteArr);
        System.out.println("Decoded String: " + decodedStr);

        // Прямое доступ к API с использованием статических методов encodeBase64() и decodeBase64()
        String strToEncode2 = "Hello World";
        String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
        String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
    }
}

Выполните следующую команду в терминале для компиляции и запуска кода:

javac -cp commons-codec-1.15.jar Base64Encoding.java && java -cp commons-codec-1.15.jar:. Base64Encoding

Примечание: Чтобы запустить этот код, вам нужно скачать и импортировать .jar-файл библиотеки Apache Commons Codec в класс-путь. В команде выше мы добавили -cp commons-codec-1.15.jar, чтобы указать класс-путь библиотеки.

Резюме

В этом практическом занятии мы узнали, как кодировать и декодировать данные Base64 в Java с использованием класса java.util.Base64 и библиотеки Apache Commons. Мы рассмотрели три различных схемы кодирования и декодирования Base64 - Basic, URL и безопасные имена файлов, а также MIME.