encoder - convert base64 string to json java



Base64 Java codifica e decodifica uma string (4)

Esta questão já tem uma resposta aqui:

Eu quero codificar uma string em base64 e transferi-lo através de um soquete e decodificá-lo de volta. Mas depois da decodificação, dá uma resposta diferente. A seguir está meu código e o resultado é "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);
       }
    }

Alguma idéia sobre como implementar isso?

Obrigado...

https://ffff65535.com


A resposta aceita usa o pacote Apache Commons, mas é assim que eu fiz usando javax.xml.bind.DatatypeConverter - isso funciona pelo menos no Java 6:

import java.io.UnsupportedEncodingException;    
import javax.xml.bind.DatatypeConverter;

public class EncodeString64 {
    public static void main(String[] args) throws UnsupportedEncodingException {

        String str = "77+9x6s=";
        // encode data using BASE64
        String encoded = DatatypeConverter.printBase64Binary(str.getBytes());
        System.out.println("encoded value is \t" + encoded);

        // Decode data 
        String decoded = new String(DatatypeConverter.parseBase64Binary(encoded));
        System.out.println("decoded value is \t" + decoded);

        System.out.println("original value is \t" + str);
    }
}

A melhor maneira seria try/catch os passos de codificação / decodificação, mas espero que você tenha a idéia.


O Java 8 agora suporta codificação e decodificação BASE64. Você pode usar as seguintes classes: java.util.Base64 , java.util.Base64.Encoder e java.util.Base64.Decoder .

Exemplo de uso:

// encode with padding
String encoded = Base64.getEncoder().encodeToString(someByteArray);

// encode without padding
String encoded = Base64.getEncoder().withoutPadding().encodeToString(someByteArray);

// decode a String
byte [] barr = Base64.getDecoder().decode(encoded); 

Para Spring Users, o Spring Security possui uma classe Base64 no pacote org.springframework.security.crypto.codec que também pode ser usado para codificação e decodificação de 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"));
}

Você pode usar a seguinte abordagem:

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

Espero que isso responda a sua dúvida.





encode