Codificación y decodificación Base64

Beginner

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos cómo codificar y decodificar datos Base64 en Java utilizando la clase java.util.Base64 y la biblioteca Apache Commons.


Skills Graph

Crea un nuevo archivo Java

En este paso, crearás un nuevo archivo Java. Abre la terminal y ejecuta el siguiente comando para crear un nuevo archivo Java:

touch ~/project/Base64Encoding.java

Este comando creará un nuevo archivo llamado Base64Encoding.java dentro del directorio ~/project. Puedes usar cualquier nombre preferido, pero asegúrate de que termine con .java.

Codificación y decodificación básicas

En este paso, aprenderemos sobre la codificación y decodificación básicas.

  • El codificador básico utiliza el Alfabeto Base64 para codificar y decodificar.
  • No agregará ningún separador de línea a la cadena codificada.
  • Usaremos el método getEncoder() que devuelve un simple Base64.Encoder.
  • Luego, usaremos el método encodeToString() para codificar la cadena.

Para decodificar una cadena codificada, usaremos el Base64.Decoder devuelto por el método getDecoder().

  • Usaremos el método decode() del decodificador.

Utiliza el bloque de código siguiente para codificar y decodificar una cadena:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Hello World";
        byte[] bytesToEncode = strToEncode.getBytes(); // convertir la cadena a un arreglo de bytes

        // Codificación
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("Cadena codificada: " + encodedStr);

        // Decodificación
        byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decodedByteArr);
        System.out.println("Cadena decodificada: " + decodedStr);
    }
}

Ejecuta el siguiente comando en la terminal para compilar y ejecutar el código:

javac Base64Encoding.java && java Base64Encoding

Codificación Base64 sin relleno

En el paso anterior, vimos que la codificación agrega caracteres de relleno (=) al final de la cadena codificada. En este paso, aprenderemos cómo codificar sin caracteres de relleno.

Utiliza el siguiente bloque de código para codificar la cadena sin relleno:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Java";
        byte[] bytesToEncode = strToEncode.getBytes(); // convertir la cadena a un arreglo de bytes

        // Codificación sin relleno
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("Cadena codificada: " + encodedStr);
    }
}

Ejecuta el siguiente comando en la terminal para compilar y ejecutar el código:

javac Base64Encoding.java && java Base64Encoding

Codificación y decodificación seguras para URL y nombres de archivo

En este paso, aprenderemos sobre la codificación y decodificación seguras para URL y nombres de archivo.

La clase Base64 maneja la codificación y decodificación de URL mediante el uso del Alfabeto Base64 seguro para URL y nombres de archivo.

  • Usaremos el método getUrlEncoder() para obtener un codificador Base64 para URL.
  • Luego, usaremos el método encodeToString() como lo hicimos en la sección anterior.

Del mismo modo, tenemos un método getUrlDecoder() que devuelve un decodificador para URL.

  • Podemos usar el método decode() con este decodificador para la decodificación.

Utiliza el bloque de código siguiente para codificar y decodificar una URL:

import java.util.Base64;

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

        // Codificación
        String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
        System.out.println("URL codificada: " + encodedUrl);

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

Ejecuta el siguiente comando en la terminal para compilar y ejecutar el código:

javac Base64Encoding.java && java Base64Encoding

Codificación y decodificación MIME

En este paso, aprenderemos sobre la codificación y decodificación MIME.

  • La clase Base64 utiliza el Alfabeto Base64 para sus operaciones de codificación y decodificación.
  • En la salida codificada, cada línea contiene un máximo de 76 caracteres.
  • Cada línea termina con un retorno de carro (\r) seguido de un salto de línea (\n) como separador de línea.

Podemos usar los métodos getMimeEncoder() y encodeToString() para la codificación.
Para decodificar, usaremos el método getMimeDecoder() para obtener un decodificador y luego usaremos el método decode().

Utiliza el siguiente bloque de código para codificar y decodificar datos MIME:

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

public class Base64Encoding {
    public static void main(String[] args) {
        // Creando una entrada MIME para codificar
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // Codificación
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("Cadena codificada: " + mimeEncodedStr);

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

Ejecuta el siguiente comando en la terminal para compilar y ejecutar el código:

javac Base64Encoding.java && java Base64Encoding

Usando la biblioteca Apache Commons

En este paso, aprenderemos cómo usar la biblioteca Apache Commons para codificar y decodificar datos Base64.

La biblioteca Apache Commons proporciona una clase Base64 dentro de su paquete org.apache.commons.codec.binary.

  • Esta clase contiene cinco constructores diferentes para diferentes esquemas de codificación.
  • Después de crear una instancia de Base64, podemos usar los métodos encode() y decode() en los bytes de la cadena para realizar la codificación y la decodificación.

Utiliza el siguiente bloque de código para codificar y decodificar una cadena utilizando la clase Base64 de Apache Commons:

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

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

        Base64 base64 = new Base64();

        // Codificación
        String strToEncode = "Hello World";
        byte[] encodedBytes = base64.encode(strToEncode.getBytes());
        String encodedStr = new String(encodedBytes);
        System.out.println("Cadena codificada: " + encodedStr);

        // Decodificación
        byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
        String decodedStr = new String(decodedByteArr);
        System.out.println("Cadena decodificada: " + decodedStr);

        // Acceder directamente a la API utilizando los métodos estáticos encodeBase64() y decodeBase64()
        String strToEncode2 = "Hello World";
        String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
        String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
    }
}

Ejecuta el siguiente comando en la terminal para compilar y ejecutar el código:

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

Nota: Para ejecutar este código, debes descargar e importar el archivo .jar de la biblioteca Apache Commons Codec en el classpath. En el comando anterior, agregamos -cp commons-codec-1.15.jar para especificar el classpath de la biblioteca.

Resumen

En este laboratorio, aprendimos cómo codificar y decodificar datos Base64 en Java utilizando la clase java.util.Base64 y la biblioteca Apache Commons. Cubrimos tres diferentes esquemas de codificación y decodificación Base64: Básico, URL y seguro para nombres de archivo, y MIME.