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 ..
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.
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).
Utilisation
String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk);
Cela peut être utile
Sun.misc.BASE64Encoder encoder = new Sun.misc.BASE64Encoder();
encoder.encode(byteArray);
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.