Java: Howto Kodierung mit BASE64

base64 KodierungTotal Bananne, aber dennoch oft gefragt, stelle ich euch heute die BASE64 Kodierung vor.

Für die Übertragung von Binärdaten im Internet hat sich im Laufe der Zeit die so genannte Base64-Kodierung durchgesetzt. Man findet diese Art der Kodierung zum Beispiel bei E-Mail-Anhängen, Downloads oder SOAP-Nachrichten. Die im Request for Comments kurz RFC 1521 beschriebene Methode übersetzt drei Bytes also 24 Bits (1 Byte = 8 Bit;-) in vier Base64-kodierte Zeichen (4 Zeichen mit jeweils 6 repräsentativen Bits). Die Base64-Zeichen bestehen aus den Buchstaben des lateinischen Alphabets, den Ziffern 0 bis 9 sowie den Sonderzeichen “+”, “/” und “=”.

Der Vorteil der BASE64 Kodierung ist ihr reduzierter Zeichensatz. Er ermöglicht es die Binärdaten korrekte und unverändert über mehrere Leitungen und Protokolle hinweg zu übertragen. Die, für die Übertragung ausgewählten Zeichen, sind außerdem so ausgewählt, dass sie in allen verbreiteten Zeichencode-Tabellen (ASCII, ANSI, UTF, etc.) an der gleichen Stelle vorkommen. Der Nachteil dieser Umformung ist jedoch, dass die Binärdaten um rund 33 % größer werden.

 

Die Umsetzung in Java

Es gibt verschiedene Möglichkeit einen String, Stream, etc in BASE64 zu kodieren und zu dekodieren. Zwei davon stelle ich hier vor:

  • Zum einen gibt es die Klassen “BASE64Encoder” und “BASE64Decoder” von Sun Mircosystems selbst
    • import sun.misc.BASE64Decoder;
      import sun.misc.BASE64Encoder;
  • und zum anderen die Klasse “Base64” der Apache Foundation (Commons).

Generell sollte die Apache Commons-Variante verwendet werden, da diese im Gegensatz zur Sun-Variante JDK unabhängig und konstant ist. Die Apache Commons Codec-Lib können sie hier downloaden.

		String text = "AxxG Blog";
		System.out.println("Dein Text: " + text);
		
			
		// Variante 1. SUN
		BASE64Encoder myEncoder = new BASE64Encoder();
		String erg = myEncoder.encode(text.getBytes());
		System.out.println("Der BASE64 String: " + erg);
		
		BASE64Decoder myDecoder = new BASE64Decoder();
		String ursp = new String(myDecoder.decodeBuffer(erg));
		System.out.println("Der Text aus dem BASE64: " + ursp);	
		
		
		// Variante 2. Apache Commons
		erg = Base64.encode(text.getBytes());
		System.out.println("Der BASE64 String: " + erg);
		
		ursp = new String(Base64.decode(erg));
		System.out.println("Der Text aus dem BASE64: " + ursp);	

 

Die Ausgabe

Dein Text: AxxG Blog
Der BASE64 String: QXh4RyBCbG9n
Der Text aus dem BASE64: AxxG Blog
Der BASE64 String: QXh4RyBCbG9n
Der Text aus dem BASE64: AxxG Blog

 

Zukunft

Wie bereits erwähnt, gibt es viele verschiedene Varianten BASE64 in Java zu nutzen. In JDK Version 8 soll es endlich einen einheitlichen Standard geben. Mehr dazu könnt ihr hier lesen: http://openjdk.java.net/jeps/135

 

Die Quellen



4 Antworten : “Java: Howto Kodierung mit BASE64”

  1. Pascal L. sagt:

    Hehe, danke :-p

  2. Christian sagt:

    Danke für das schöne Howto!
    Zum Thema hätte ich da auch noch was, und zwar einen Echtzeit Base64 online Encoder. Damit kann man die Ergebnisse direkt beim Tippen schon sehen.

    Viele Grüße,
    Christian

Kommentar verfassen