Codificação e Decodificação Base64

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos como codificar e decodificar dados Base64 em Java usando a classe java.util.Base64 e a biblioteca Apache Commons.

Criar um novo arquivo Java

Nesta etapa, você criará um novo arquivo Java. Abra o terminal e execute o seguinte comando para criar um novo arquivo Java:

touch ~/project/Base64Encoding.java

Este comando criará um novo arquivo chamado Base64Encoding.java dentro do diretório ~/project. Você pode usar qualquer nome preferido, mas certifique-se de que ele termine com .java.

Codificação e Decodificação Básicas

Nesta etapa, aprenderemos sobre Codificação e Decodificação Básicas.

  • O codificador básico usa o Alfabeto Base64 para codificação e decodificação.
  • Ele não adicionará nenhum separador de linha à string codificada.
  • Usaremos o método getEncoder() que retorna um simples Base64.Encoder.
  • Em seguida, usaremos o método encodeToString() para codificar a string.

Para decodificar uma string codificada, usaremos o Base64.Decoder retornado pelo método getDecoder().

  • Usaremos o método decode() do decodificador.

Use o bloco de código abaixo para codificar e decodificar uma string:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Hello World";
        byte[] bytesToEncode = strToEncode.getBytes(); // convert the string to a byte array

        // Encoding
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("Encoded String: " + encodedStr);

        // Decoding
        byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decodedByteArr);
        System.out.println("Decoded String: " + decodedStr);
    }
}

Execute o seguinte comando no terminal para compilar e executar o código:

javac Base64Encoding.java && java Base64Encoding

Codificação Base64 sem Padding

Na etapa anterior, vimos que a codificação adiciona caracteres de padding ( = ) no final da string codificada. Nesta etapa, aprenderemos como codificar sem caracteres de padding.

Use o seguinte bloco de código para codificar a string sem padding:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Java";
        byte[] bytesToEncode = strToEncode.getBytes(); // convert the string to a byte array

        // Encoding without padding
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("Encoded String: " + encodedStr);
    }
}

Execute o seguinte comando no terminal para compilar e executar o código:

javac Base64Encoding.java && java Base64Encoding

Codificação e Decodificação Segura para URLs e Nomes de Arquivos

Nesta etapa, aprenderemos sobre Codificação e Decodificação Seguras para URL e Nome de Arquivo.

A classe Base64 lida com a codificação e decodificação de URL usando o Alfabeto Base64 seguro para URL e Nome de Arquivo.

  • Usaremos o método getUrlEncoder() para obter um codificador Base64 para URL.
  • Em seguida, usaremos o método encodeToString() como fizemos na seção anterior.

Da mesma forma, temos um método getUrlDecoder() que retorna um decodificador de URL.

  • Podemos usar o método decode() com este decodificador para decodificação.

Use o bloco de código abaixo para codificar e decodificar uma URL:

import java.util.Base64;

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

        // Encoding
        String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
        System.out.println("Encoded URL: " + encodedUrl);

        // Decoding
        byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
        String decodedUrl = new String(decodedUrlBytes);
        System.out.print("Decoded URL: " + decodedUrl);
    }
}

Execute o seguinte comando no terminal para compilar e executar o código:

javac Base64Encoding.java && java Base64Encoding

Codificação e Decodificação MIME

Nesta etapa, aprenderemos sobre Codificação e Decodificação MIME.

  • A classe Base64 usa o Alfabeto Base64 para suas operações de codificação e decodificação.
  • Na saída codificada, cada linha contém um máximo de 76 caracteres.
  • Cada linha termina com um retorno de carro ( \r ) seguido por uma alimentação de linha ( \n ) como separador de linha.

Podemos usar os métodos getMimeEncoder() e encodeToString() para a codificação.
Para decodificar, usaremos o método getMimeDecoder() para obter um decodificador e, em seguida, usaremos o método decode().

Use o seguinte bloco de código para codificar e decodificar dados MIME:

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

public class Base64Encoding {
    public static void main(String[] args) {
        // Creating a MIME input for encoding
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // Encoding
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("Encoded String: " + mimeEncodedStr);

        // Decoding
        byte[] mimeDecodedBytes = Base64.getMimeDecoder().decode(mimeEncodedStr);
        String mimeDecodedStr = new String(mimeDecodedBytes);
    }
}

Execute o seguinte comando no terminal para compilar e executar o código:

javac Base64Encoding.java && java Base64Encoding

Utilizando a Biblioteca Apache Commons

Nesta etapa, aprenderemos como usar a biblioteca Apache Commons para codificar e decodificar dados Base64.

A biblioteca Apache Commons fornece uma classe Base64 dentro de seu pacote org.apache.commons.codec.binary.

  • Esta classe contém cinco construtores diferentes para diferentes esquemas de codificação.
  • Após criar uma instância Base64, podemos usar os métodos encode() e decode() nos bytes da string para realizar a codificação e decodificação.

Use o seguinte bloco de código para codificar e decodificar uma string usando a classe Base64 da Apache Commons:

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

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

        Base64 base64 = new Base64();

        // Encoding
        String strToEncode = "Hello World";
        byte[] encodedBytes = base64.encode(strToEncode.getBytes());
        String encodedStr = new String(encodedBytes);
        System.out.println("Encoded String: " + encodedStr);

        // Decoding
        byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
        String decodedStr = new String(decodedByteArr);
        System.out.println("Decoded String: " + decodedStr);

        // Directly access the API by using the static methods encodeBase64() and decodeBase64()
        String strToEncode2 = "Hello World";
        String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
        String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
    }
}

Execute o seguinte comando no terminal para compilar e executar o código:

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

Nota: Para executar este código, você precisa baixar e importar o arquivo .jar da biblioteca Apache Commons Codec no classpath. No comando acima, adicionamos -cp commons-codec-1.15.jar para especificar o classpath da biblioteca.

Resumo

Neste laboratório, aprendemos como codificar e decodificar dados Base64 em Java usando a classe java.util.Base64 e a biblioteca Apache Commons. Cobrimos três diferentes esquemas de codificação e decodificação Base64 - Basic, URL e Filename safe, e MIME.