Encodage et décodage Base64

Beginner

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons apprendre à encoder et à décoder des données Base64 en Java à l'aide de la classe java.util.Base64 et de la bibliothèque Apache Commons.


Skills Graph

Créer un nouveau fichier Java

Dans cette étape, vous allez créer un nouveau fichier Java. Ouvrez le terminal et exécutez la commande suivante pour créer un nouveau fichier Java :

touch ~/project/Base64Encoding.java

Cette commande créera un nouveau fichier nommé Base64Encoding.java dans le répertoire ~/project. Vous pouvez utiliser n'importe quel nom que vous préférez, mais assurez-vous qu'il se termine par .java.

Encodage et décodage de base

Dans cette étape, nous allons apprendre à encoder et à décoder de base.

  • L'encodeur de base utilise l'alphabet Base64 pour l'encodage et le décodage.
  • Il n'ajoutera aucun séparateur de ligne à la chaîne encodée.
  • Nous utiliserons la méthode getEncoder() qui renvoie un simple Base64.Encoder.
  • Ensuite, nous utiliserons la méthode encodeToString() pour encoder la chaîne.

Pour décoder une chaîne encodée, nous utiliserons le Base64.Decoder renvoyé par la méthode getDecoder().

  • Nous utiliserons la méthode decode() du décodeur.

Utilisez le bloc de code ci-dessous pour encoder et décoder une chaîne :

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Hello World";
        byte[] bytesToEncode = strToEncode.getBytes(); // convertir la chaîne en un tableau d'octets

        // Encodage
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("Chaîne encodée : " + encodedStr);

        // Décodage
        byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decodedByteArr);
        System.out.println("Chaîne décodée : " + decodedStr);
    }
}

Exécutez la commande suivante dans le terminal pour compiler et exécuter le code :

javac Base64Encoding.java && java Base64Encoding

Encodage Base64 sans remplissage

Dans l'étape précédente, nous avons vu que l'encodage ajoute des caractères de remplissage ( = ) à la fin de la chaîne encodée. Dans cette étape, nous allons apprendre à encoder sans caractères de remplissage.

Utilisez le bloc de code suivant pour encoder la chaîne sans remplissage :

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Java";
        byte[] bytesToEncode = strToEncode.getBytes(); // convertir la chaîne en un tableau d'octets

        // Encodage sans remplissage
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("Chaîne encodée : " + encodedStr);
    }
}

Exécutez la commande suivante dans le terminal pour compiler et exécuter le code :

javac Base64Encoding.java && java Base64Encoding

Encodage et décodage sécurisés pour les URL et les noms de fichier

Dans cette étape, nous allons apprendre à encoder et à décoder de manière sécurisée pour les URL et les noms de fichier.

La classe Base64 gère l'encodage et le décodage des URL en utilisant l'alphabet Base64 sécurisé pour les URL et les noms de fichier.

  • Nous utiliserons la méthode getUrlEncoder() pour obtenir un encodeur Base64 pour les URL.
  • Ensuite, nous utiliserons la méthode encodeToString() comme nous l'avons fait dans la section précédente.

De manière similaire, nous avons une méthode getUrlDecoder() qui renvoie un décodeur pour les URL.

  • Nous pouvons utiliser la méthode decode() avec ce décodeur pour le décodage.

Utilisez le bloc de code ci-dessous pour encoder et décoder une URL :

import java.util.Base64;

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

        // Encodage
        String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
        System.out.println("URL encodée : " + encodedUrl);

        // Décodage
        byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
        String decodedUrl = new String(decodedUrlBytes);
        System.out.print("URL décodée : " + decodedUrl);
    }
}

Exécutez la commande suivante dans le terminal pour compiler et exécuter le code :

javac Base64Encoding.java && java Base64Encoding

Encodage et décodage MIME

Dans cette étape, nous allons apprendre à encoder et à décoder en MIME.

  • La classe Base64 utilise l'alphabet Base64 pour ses opérations d'encodage et de décodage.
  • Dans la sortie encodée, chaque ligne contient au maximum 76 caractères.
  • Chaque ligne se termine par un retour chariot ( \r ) suivi d'un saut de ligne ( \n ) en tant que séparateur de ligne.

Nous pouvons utiliser les méthodes getMimeEncoder() et encodeToString() pour l'encodage.
Pour le décodage, nous utiliserons la méthode getMimeDecoder() pour obtenir un décodeur, puis nous utiliserons la méthode decode().

Utilisez le bloc de code suivant pour encoder et décoder des données MIME :

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

public class Base64Encoding {
    public static void main(String[] args) {
        // Création d'une entrée MIME pour l'encodage
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // Encodage
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("Chaîne encodée : " + mimeEncodedStr);

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

Exécutez la commande suivante dans le terminal pour compiler et exécuter le code :

javac Base64Encoding.java && java Base64Encoding

Utilisation de la bibliothèque Apache Commons

Dans cette étape, nous allons apprendre à utiliser la bibliothèque Apache Commons pour encoder et décoder des données Base64.

La bibliothèque Apache Commons fournit une classe Base64 dans son package org.apache.commons.codec.binary.

  • Cette classe contient cinq constructeurs différents pour différents schémas d'encodage.
  • Après avoir créé une instance Base64, nous pouvons utiliser les méthodes encode() et decode() sur les octets de la chaîne pour effectuer l'encodage et le décodage.

Utilisez le bloc de code suivant pour encoder et décoder une chaîne à l'aide de la classe Base64 d'Apache Commons :

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

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

        Base64 base64 = new Base64();

        // Encodage
        String strToEncode = "Hello World";
        byte[] encodedBytes = base64.encode(strToEncode.getBytes());
        String encodedStr = new String(encodedBytes);
        System.out.println("Chaîne encodée : " + encodedStr);

        // Décodage
        byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
        String decodedStr = new String(decodedByteArr);
        System.out.println("Chaîne décodée : " + decodedStr);

        // Accéder directement à l'API en utilisant les méthodes statiques encodeBase64() et decodeBase64()
        String strToEncode2 = "Hello World";
        String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
        String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
    }
}

Exécutez la commande suivante dans le terminal pour compiler et exécuter le code :

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

Remarque : Pour exécuter ce code, vous devez télécharger et importer le fichier .jar de la bibliothèque Apache Commons Codec dans le classpath. Dans la commande ci-dessus, nous avons ajouté -cp commons-codec-1.15.jar pour spécifier le classpath de la bibliothèque.

Sommaire

Dans ce laboratoire, nous avons appris à encoder et à décoder des données Base64 en Java à l'aide de la classe java.util.Base64 et de la bibliothèque Apache Commons. Nous avons abordé trois schémas différents d'encodage et de décodage Base64 - Basic, URL et Filename safe, et MIME.