377 Stimmen

Kodierung als Base64 in Java

Ich muss einige Daten in der Base64-Kodierung in Java kodieren. Wie kann ich das tun? Wie lautet der Name der Klasse, die einen Base64-Encoder bereitstellt?


Ich habe versucht, die sun.misc.BASE64Encoder Klasse, ohne Erfolg. Ich habe die folgende Zeile von Java 7 Code:

wr.write(new sun.misc.BASE64Encoder().encode(buf));

Ich verwende Eclipse. Eclipse markiert diese Zeile als einen Fehler. Ich habe die erforderlichen Bibliotheken importiert:

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

Aber auch hier werden beide als Fehler angezeigt. Ich fand ein ähnlicher Beitrag hier .

Ich habe Apache Commons als die von including vorgeschlagene Lösung verwendet:

import org.apache.commons.*;

und importieren die heruntergeladenen JAR-Dateien: http://commons.apache.org/codec/

Aber das Problem besteht weiterhin. Eclipse zeigt immer noch die bereits erwähnten Fehler an. Was sollte ich tun?

711voto

Frank Punkte 15919

Sie müssen den Import Ihrer Klasse ändern:

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

Und dann ändern Sie Ihre Klasse, um die Base64-Klasse zu verwenden.

Hier ist ein Beispielcode:

byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

Dann lesen Sie warum Sie keine sun.*-Pakete verwenden sollten .


Update (2016-12-16)

Sie können nun Folgendes verwenden java.util.Base64 mit Java 8. Importieren Sie es zunächst wie gewohnt:

import java.util.Base64;

Verwenden Sie dann die statischen Base64-Methoden wie folgt:

byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

Wenn Sie eine Zeichenfolge direkt kodieren und das Ergebnis als kodierte Zeichenfolge erhalten möchten, können Sie dies verwenden:

String encodeBytes = Base64.getEncoder().encodeToString((userName + ":" + password).getBytes());

Véase Java-Dokumentation für Base64 für mehr.

258voto

bratan Punkte 3347

Verwenden Sie die Klasse "Niemals zu spät zum Mitmachen" von Java 8: java.util.Base64

new String(Base64.getEncoder().encode(bytes));

89voto

Kirby Punkte 14142

In Java 8 kann dies wie folgt geschehen: Base64.getEncoder().encodeToString(string.getBytes(StandardCharsets.UTF_8))

Hier ist ein kurzes, in sich geschlossenes, vollständiges Beispiel:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Temp {
    public static void main(String... args) throws Exception {
        final String s = "old crow medicine show";
        final byte[] authBytes = s.getBytes(StandardCharsets.UTF_8);
        final String encoded = Base64.getEncoder().encodeToString(authBytes);
        System.out.println(s + " => " + encoded);
    }
}

Ausgabe:

old crow medicine show => b2xkIGNyb3cgbWVkaWNpbmUgc2hvdw==

68voto

stinepike Punkte 52921

Sie können auch mit Base64-Kodierung konvertieren. Dazu können Sie den Befehl javax.xml.bind.DatatypeConverter#printBase64Binary Methode.

Zum Beispiel:

byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
System.out.println(DatatypeConverter.printBase64Binary(salt));

22voto

Tho Punkte 19990

Mit Guave

pom.xml:

<dependency>
   <artifactId>guava</artifactId>
   <groupId>com.google.guava</groupId>
   <type>jar</type>
   <version>14.0.1</version>
</dependency>

Beispiel-Code:

// encode
String s = "Hello Viet Nam";
String base64 = BaseEncoding.base64().encode(s.getBytes("UTF-8"));

// decode
System.out.println("Base64:" + base64); // SGVsbG8gVmnhu4d0IE5hbQ==
byte[] bytes = BaseEncoding.base64().decode(base64);
System.out.println("Decoded: " + new String(bytes, "UTF-8")); // Hello Viet Nam

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X