web-dev-qa-db-fra.com

Conversion de tableau d'octets en chaîne java base64

Essayer de convertir un byte[] en chaîne base64 en utilisant org.Apache.commons.codec.binary.Base64 .. Pour cela, mon code Java ressemble à ceci:

 base64String = Base64.encodeBase64URLSafeString(myByteArray);

Mais ce que je vois, ce sont des caractères non valides dans la chaîne base64 générée ..ScreenShot

Pourquoi vois-je ces lignes ____ dans ma chaîne base64 générée? Est-ce une chaîne valide? Notez que la longueur de la chaîne générée est divisible par quatre.

8
Suave Nti

avez-vous essayé avec la méthode encodeBase64String au lieu d'utiliser encodeBase64URLSafeString

encodeBase64URLSafeString:

Encode les données binaires à l’aide d’une variante de l’algorithme base64 Adaptée aux URL, mais ne tronque pas la sortie. La variante url-safe émet - et _ Au lieu de + et /.

encodeBase64String:

Encode les données binaires à l'aide de l'algorithme base64 mais ne fragmente pas la sortie . Remarque: nous avons changé le comportement de cette méthode de chunking multi-ligne (Commons-codec-1.4) à une seule ligne non-chunking (Commons-codec-1.5).

source: org.Apache.commons.codec.binary.Base64 javadoc

2

Utilisation 

String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk); 
1
Taran

Cela peut être utile

Sun.misc.BASE64Encoder encoder = new Sun.misc.BASE64Encoder();
encoder.encode(byteArray);
1
Koti

vous avez (au moins) deux versions de base64, la version originale utilisant '+' et '/' en plus des caractères alphanumériques, et la lettre "url safe" en utilisant "-" et "_" pour que le contenu peut être inclus dans une URL (ou utilisé comme un nom de fichier, btw).

Il semble que vous utilisiez un encodeur base64 qui a été transformé en "mode sans danger pour les URL".

Le javadoc d'Apache pour URLSafeString ()

Oh, et '_' étant le dernier caractère de l'alphabet en base64, voir les chaînes de caractères de "____" signifie que vous avez codé des fragments de 0xffffff ..., tout comme "AAAAAA" signifie qu'il y a beaucoup de zéros consécutifs. 

Si vous voulez être convaincu que c'est un cas normal, choisissez simplement votre dumper/éditeur hexadécimal préféré et vérifiez à quoi ressemblait votre entrée binaire.

0
PypeBros