Base64 Java codeert en decodeert een string

Ik wil een string coderen in base64 en het door een socket sturen en het terug decoderen.

Maar na het decoderen geeft het een ander antwoord.

Het volgende is mijn code en het resultaat is "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);
       }
    }

Enig idee over hoe dit te implementeren?

Oplossing

U kunt de volgende aanpak gebruiken:

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));

Hopelijk beantwoordt dit je twijfel.

Commentaren (8)

Voor Spring gebruikers, Spring Security heeft een Base64 klasse in het org.springframework.security.crypto.codec pakket dat ook gebruikt kan worden voor het coderen en decoderen van Base64. Ex.

 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"));
}
Commentaren (0)

Het volgende is een goede oplossing -

import android.util.Base64;

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

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

Dat's het. Een enkele regel coderen en decoderen.

Commentaren (1)