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.
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()etdecode()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.
Résumé
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.



