Base64-Kodierung und -Dekodierung

Beginner

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir lernen, wie man in Java Base64-Daten mithilfe der Klasse java.util.Base64 und der Apache Commons-Bibliothek kodiert und dekodiert.


Skills Graph

Erstellen einer neuen Java-Datei

In diesem Schritt erstellen Sie eine neue Java-Datei. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um eine neue Java-Datei zu erstellen:

touch ~/project/Base64Encoding.java

Dieser Befehl erstellt eine neue Datei namens Base64Encoding.java im Verzeichnis ~/project. Sie können einen beliebigen bevorzugten Namen verwenden, aber sicherstellen, dass der Dateiname mit .java endet.

Grundlegende Kodierung und Dekodierung

In diesem Schritt lernen wir über die Grundlegende Kodierung und Dekodierung.

  • Der Basic-Coder verwendet das Base64-Alphabet zur Kodierung und Dekodierung.
  • Er fügt keinerlei Zeilenumbrüche zur codierten Zeichenfolge hinzu.
  • Wir werden die getEncoder()-Methode verwenden, die einen einfachen Base64.Encoder zurückgibt.
  • Anschließend werden wir die encodeToString()-Methode verwenden, um die Zeichenfolge zu kodieren.

Zum Dekodieren einer codierten Zeichenfolge verwenden wir den Base64.Decoder, der von der getDecoder()-Methode zurückgegeben wird.

  • Wir werden die decode()-Methode des Decoders verwenden.

Verwenden Sie den folgenden Codeblock, um eine Zeichenfolge zu kodieren und zu dekodieren:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Hello World";
        byte[] bytesToEncode = strToEncode.getBytes(); // wandelt die Zeichenfolge in ein Byte-Array um

        // Kodierung
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("Codierte Zeichenfolge: " + encodedStr);

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

Führen Sie den folgenden Befehl im Terminal aus, um den Code zu kompilieren und auszuführen:

javac Base64Encoding.java && java Base64Encoding

Base64-Kodierung ohne Auffüllung

Im vorherigen Schritt haben wir gesehen, dass die Kodierung Auffüllzeichen ( = ) am Ende der codierten Zeichenfolge hinzufügt. In diesem Schritt werden wir lernen, wie man ohne Auffüllzeichen kodiert.

Verwenden Sie den folgenden Codeblock, um die Zeichenfolge ohne Auffüllung zu kodieren:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Java";
        byte[] bytesToEncode = strToEncode.getBytes(); // wandelt die Zeichenfolge in ein Byte-Array um

        // Kodierung ohne Auffüllung
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("Codierte Zeichenfolge: " + encodedStr);
    }
}

Führen Sie den folgenden Befehl im Terminal aus, um den Code zu kompilieren und auszuführen:

javac Base64Encoding.java && java Base64Encoding

URL- und Dateinamen-sichere Kodierung und Dekodierung

In diesem Schritt lernen wir über die URL- und Dateinamen-sichere Kodierung und Dekodierung.

Die Base64-Klasse behandelt die URL-Kodierung und -Dekodierung, indem sie das URL- und Dateinamen-sichere Base64-Alphabet verwendet.

  • Wir werden die getUrlEncoder()-Methode verwenden, um einen Base64-URL-Coder zu erhalten.
  • Anschließend werden wir die encodeToString()-Methode wie im vorherigen Abschnitt verwenden.

Ähnlich haben wir eine getUrlDecoder()-Methode, die einen URL-Decoder zurückgibt.

  • Wir können die decode()-Methode mit diesem Decoder verwenden, um zu dekodieren.

Verwenden Sie den folgenden Codeblock, um eine URL zu kodieren und zu dekodieren:

import java.util.Base64;

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

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

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

Führen Sie den folgenden Befehl im Terminal aus, um den Code zu kompilieren und auszuführen:

javac Base64Encoding.java && java Base64Encoding

MIME-Kodierung und -Dekodierung

In diesem Schritt lernen wir über die MIME-Kodierung und -Dekodierung.

  • Die Base64-Klasse verwendet das Base64-Alphabet für ihre Kodierungs- und Dekodierungsoperationen.
  • In der codierten Ausgabe enthält jede Zeile maximal 76 Zeichen.
  • Jede Zeile endet mit einem Wagenrücklauf( \r ) gefolgt von einem Zeilenumbruch( \n ) als Zeilenseparator.

Wir können die getMimeEncoder()- und die encodeToString()-Methoden für die Kodierung verwenden.
Zum Dekodieren verwenden wir die getMimeDecoder()-Methode, um einen Decoder zu erhalten, und anschließend die decode()-Methode.

Verwenden Sie den folgenden Codeblock, um MIME-Daten zu kodieren und zu dekodieren:

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

public class Base64Encoding {
    public static void main(String[] args) {
        // Erstellen einer MIME-Eingabe für die Kodierung
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // Kodierung
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("Codierte Zeichenfolge: " + mimeEncodedStr);

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

Führen Sie den folgenden Befehl im Terminal aus, um den Code zu kompilieren und auszuführen:

javac Base64Encoding.java && java Base64Encoding

Verwendung der Apache Commons-Bibliothek

In diesem Schritt lernen wir, wie man die Apache Commons-Bibliothek zur Kodierung und Dekodierung von Base64-Daten verwendet.

Die Apache Commons-Bibliothek stellt eine Base64-Klasse im Paket org.apache.commons.codec.binary zur Verfügung.

  • Diese Klasse enthält fünf verschiedene Konstruktoren für verschiedene Codierungsschemata.
  • Nachdem eine Base64-Instanz erstellt wurde, können wir die encode()- und decode()-Methoden auf den String-Bytes verwenden, um die Kodierung und Dekodierung durchzuführen.

Verwenden Sie den folgenden Codeblock, um eine Zeichenfolge mit der Apache Commons Base64-Klasse zu kodieren und zu dekodieren:

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

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

        Base64 base64 = new Base64();

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

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

        // Direkten Zugang zur API über die statischen Methoden encodeBase64() und decodeBase64()
        String strToEncode2 = "Hello World";
        String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
        String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
    }
}

Führen Sie den folgenden Befehl im Terminal aus, um den Code zu kompilieren und auszuführen:

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

Hinweis: Um diesen Code auszuführen, müssen Sie die .jar-Datei der Apache Commons Codec-Bibliothek herunterladen und in den Klassenpfad importieren. Im obigen Befehl haben wir -cp commons-codec-1.15.jar hinzugefügt, um den Klassenpfad der Bibliothek anzugeben.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man in Java Base64-Daten mit der java.util.Base64-Klasse und der Apache Commons-Bibliothek kodieren und dekodieren kann. Wir haben drei verschiedene Base64-Kodierungs- und -Dekodierungsschemata behandelt - Basic, URL und Dateinamen-sicher sowie MIME.