Base64 Java koduje i dekoduje ciąg znaków

Chcę zakodować ciąg znaków do base64 i przesłać go przez gniazdo i zdekodować z powrotem.

Ale po zdekodowaniu daje inną odpowiedź.

Poniżej znajduje się mój kod, a wynik to "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);
       }
    }

Jakiś pomysł, jak to zaimplementować?

Rozwiązanie

Możesz użyć następującego podejścia:

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

Mam nadzieję, że to odpowiada na twoje wątpliwości.

Komentarze (8)

Dla użytkowników Spring , Spring Security ma klasę Base64 w pakiecie org.springframework.security.crypto.codec, która może być również używana do kodowania i dekodowania 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"));
}
Komentarze (0)

Następujące rozwiązanie jest dobre -

import android.util.Base64;

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

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

To jest to. Kodowanie i dekodowanie w jednej linii.

Komentarze (1)