Base64 Java encoder et décoder une chaîne [dupliquer]

cette question a déjà une réponse ici:

je veux encoder une chaîne dans base64 et la transférer à travers une socket et la décoder en arrière. Mais après le décodage il donne une réponse différente. Voici mon code et le résultat est "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);
       }
    }

une idée de la façon de mettre en œuvre ceci?

Merci...

122
demandé sur Sameera Kumarasingha 2013-11-02 20:03:39

6 réponses

Vous pouvez utiliser l'approche suivante:

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

espérons que cela répondra à vos doutes.

184
répondu Dark Knight 2018-01-26 13:53:17

Java 8 prend maintenant en charge L'encodage et le décodage de BASE64. Vous pouvez utiliser les classes suivantes: java.util.Base64 , java.util.Base64.Encoder et java.util.Base64.Decoder .

exemple d'usage:

// 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); 
108
répondu Lakshma Gopidi 2015-06-03 00:31:29

la réponse acceptée utilise le paquet Apache Commons, mais c'est comme ça que je l'ai fait en utilisant javax.xml.bind.DatatypeConverter - cela fonctionne à partir D'au moins Java 6 sur:

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

la meilleure façon serait de try/catch les étapes d'encodage/décodage, mais avec un peu de chance vous obtenez l'idée.

45
répondu nocdib 2018-06-19 09:53:23

pour les utilisateurs de ressorts , la sécurité de ressort a une classe de Base64 dans le paquet org.springframework.security.crypto.codec qui peut également être utilisé pour l'encodage et le décodage 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"));
}
23
répondu iamiddy 2014-10-23 14:38:03

ce qui suit est une bonne solution -

import android.util.Base64;

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

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

C'est ça. Un encodage et un décodage d'une seule ligne.

15
répondu Yehonatan 2016-06-27 08:35:20
import javax.xml.bind.DatatypeConverter;

public class f{

   public static void main(String a[]){

      String str = new String(DatatypeConverter.printBase64Binary(new String("user:123").getBytes()));
      String res = DatatypeConverter.parseBase64Binary(str);
      System.out.println(res);
   }
}
7
répondu Tahong Shen 2015-03-12 07:55:58