Je veux encoder une chaîne de caractères en base64
et la transférer à travers un socket et la décoder en retour.
Mais après le décodage, la réponse est 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);
}
}
Avez-vous une idée de la façon de mettre en œuvre cette méthode ?
Vous pouvez utiliser l'approche suivante :
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));
J'espère que cela répond à vos questions.
Pour les utilisateurs de Spring, Spring Security dispose d'une classe Base64 dans le paquet org.springframework.security.crypto.codec
qui peut également être utilisée 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"));
}
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 tout. Une seule ligne de codage et de décodage.