Comment convertir un tableau d'octets en Base64 en Java?


120

D'accord, je sais comment le faire en C #.

C'est aussi simple que:

Convert.ToBase64String(byte[])
and Convert.FromBase64String(string) to get byte[] back.

Comment puis-je faire cela en Java?

Réponses:


226

Java 8+

Encodez ou décodez des tableaux d'octets:

byte[] encoded = Base64.getEncoder().encode("Hello".getBytes());
println(new String(encoded));   // Outputs "SGVsbG8="

byte[] decoded = Base64.getDecoder().decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Ou si vous voulez juste les chaînes:

String encoded = Base64.getEncoder().encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(Base64.getDecoder().decode(encoded.getBytes()));
println(decoded)    // Outputs "Hello"

Pour plus d'informations, consultez Base64 .

Java <8

Base64 n'est pas fourni avec les versions Java inférieures à 8. Je recommande d'utiliser Apache Commons Codec .

Pour les tableaux d'octets directs:

Base64 codec = new Base64();
byte[] encoded = codec.encode("Hello".getBytes());
println(new String(encoded));   // Outputs "SGVsbG8="

byte[] decoded = codec.decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Ou si vous voulez juste les chaînes:

Base64 codec = new Base64();
String encoded = codec.encodeBase64String("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(codec.decodeBase64(encoded));
println(decoded)    // Outputs "Hello"

Printemps

Si vous travaillez déjà dans un projet Spring, vous trouverez peut-être leur org.springframework.util.Base64Utilsclasse plus ergonomique:

Pour les tableaux d'octets directs:

byte[] encoded = Base64Utils.encode("Hello".getBytes());
println(new String(encoded))    // Outputs "SGVsbG8="

byte[] decoded = Base64Utils.decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Ou si vous voulez juste les chaînes:

String encoded = Base64Utils.encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = Base64Utils.decodeFromString(encoded);
println(new String(decoded))    // Outputs "Hello"

Android (avec Java <8)

Si vous utilisez le SDK Android avant Java 8, la meilleure option consiste à utiliser le kit android.util.Base64.

Pour les tableaux d'octets directs:

byte[] encoded = Base64.encode("Hello".getBytes());
println(new String(encoded))    // Outputs "SGVsbG8="

byte [] decoded = Base64.decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Ou si vous voulez juste les chaînes:

String encoded = Base64.encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(Base64.decode(encoded));
println(decoded)    // Outputs "Hello"

29

Utilisation:

byte[] data = Base64.encode(base64str);

L'encodage se convertit en Base64

Vous devrez référencer le codec commun de votre projet pour que ce code fonctionne.

Pour java8 :

import java.util.Base64

21
Les méthodes d'encodage / décodage de la classe Base64 sont statiques, vous n'avez donc pas besoin de créer un nouvel objet. Ensuite: byte [] data = Base64.decode (base64str); est assez.
Ernesto Campohermoso

15

De plus, pour nos amis Android (niveau API 8):

import android.util.Base64

...

Base64.encodeToString(bytes, Base64.DEFAULT);

7

Dans le cas où vous utilisez le framework Spring avec Java, il existe un moyen simple de contourner le problème.

  1. Importez les éléments suivants.

    import org.springframework.util.Base64Utils;
  2. Convertissez comme ça.

    byte [] bytearr = {0,1,2,3,4};
    String encodedText = Base64Utils.encodeToString (bytearr);
    

    Pour décoder, vous pouvez utiliser la méthode decodeToString de la classe Base64Utils.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.