Base64 Java kodiert und dekodiert eine Zeichenkette

Ich möchte eine Zeichenkette in base64 kodieren und über einen Socket übertragen und zurück dekodieren.

Aber nach der Dekodierung gibt es eine andere Antwort.

Im Folgenden ist mein Code und das Ergebnis ist "77+9x6s="

import javax.xml.bind.DatatypeConverter;

    public class f{

       public static void main(String a[]){

          String str = new String(DatatypeConverter.parseBase64Binary("user:123"));
          String res = DatatypeConverter.printBase64Binary(str.getBytes());
          System.out.println(res);
       }
    }

Haben Sie eine Idee, wie ich das umsetzen kann?

Lösung

Sie können folgenden Ansatz verwenden:

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

// Encode data on your side using BASE64
byte[] bytesEncoded = Base64.encodeBase64(str.getBytes());
System.out.println("encoded value is " + new String(bytesEncoded));

// Decode data on other side, by processing encoded data
byte[] valueDecoded = Base64.decodeBase64(bytesEncoded);
System.out.println("Decoded value is " + new String(valueDecoded));

Ich hoffe, dies beantwortet Ihre Zweifel.

Kommentare (8)

Für Spring-Benutzer bietet Spring Security eine Base64-Klasse im Paket "org.springframework.security.crypto.codec", die auch für die Kodierung und Dekodierung von Base64 verwendet werden kann. Bsp.

 public static String base64Encode(String token) {
    byte[] encodedBytes = Base64.encode(token.getBytes());
    return new String(encodedBytes, Charset.forName("UTF-8"));
}

public static String base64Decode(String token) {
    byte[] decodedBytes = Base64.decode(token.getBytes());
    return new String(decodedBytes, Charset.forName("UTF-8"));
}
Kommentare (0)

Eine gute Lösung ist die folgende -

import android.util.Base64;

String converted = Base64.encodeToString(toConvert.toString().getBytes(), Base64.DEFAULT);

String stringFromBase = new String(Base64.decode(converted, Base64.DEFAULT));

Das's ist es. Eine einzige Zeile Kodierung und Dekodierung.

Kommentare (1)