Base64 Java koder og afkoder en streng

Jeg ønsker at kode en streng til base64 og overføre den gennem en socket og afkode den tilbage.

Men efter dekodning giver det et andet svar.

Følgende er min kode og resultatet er "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);
       }
    }

Nogen idé om, hvordan man kan implementere dette?

Løsning

Du kan bruge følgende fremgangsmåde:

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

Håber dette besvarer din tvivl.

Kommentarer (8)

For Spring-brugere har Spring Security en Base64-klasse i pakken org.springframework.security.crypto.codec, som også kan bruges til kodning og dekodning af Base64. Eks.

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

Følgende er en god løsning -

import android.util.Base64;

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

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

Det er det. En enkelt linje kodning og afkodning.

Kommentarer (1)