Total 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.
Es gibt verschiedene Möglichkeit einen String, Stream, etc in BASE64 zu kodieren und zu dekodieren. Zwei davon stelle ich hier vor:
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;
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);
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
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
Hehe, danke :-p
Du hast mich auf die Idee gebraucht:-)
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
Hallo Christian,
Danke für das Lob^^
Ich habe gerade gesehen, dass du die URL in deinem Link-Verweis vergessen hast. Könntest du die bitte nach reichen?
Danke!