Erreur lors de la tentative d'encodage / décodage de la chaîne en Base64
J'ai besoin de faire de l'encodage Base64 de tableau d'octets à stirng plutôt que d'un autre tableau d'octets. Mais quand je le décoder en arrière-je obtenir de l'exception. Voici le code
Je suis en train de coder un tableau d'octets en une chaîne de caractères à l'aide de l'encodage Base64. Quand j'ai coder, il semble que cela fonctionne, mais quand je décoder elle lève une exception. Ce que je fais mal?
import org.springframework.security.crypto.codec.Base64;
byte[] bytes = new byte[]{1,2,3,4,5,6,7,8,9};
String stringToStore = Base64.encode(bytes).toString();
byte[] restoredBytes = Base64.decode(stringToStore.getBytes());
Ici est l'exception, j'obtiens:
org.springframework.security.crypto.codec.InvalidBase64CharacterException: Bad Base64 input character decimal 91 in array position 0
at org.springframework.security.crypto.codec.Base64.decode(Base64.java:625)
at org.springframework.security.crypto.codec.Base64.decode(Base64.java:246)
source d'informationauteur user1651914
Vous devez vous connecter pour publier un commentaire.
Pourriez-vous essayer...
Base64.coder(en octets).toString() ne renvoie pas la Chaîne que vous attendez.
Vous devez utiliser
comme suggéré par iccthedral.
Si vous utilisez l'API Android 8+ il y a un
Base64
de la classe helper dansandroid.util
.Ce n'est pas en tournant les octets d'une chaîne de caractères. C'est de Java chaîne de la représentation de l'objet (par exemple,
"[B@9a4d5c6"
). Vous devez faire ce que iccthedral suggérer et vous fournir les octets d'une Chaîne de classe.Cela fonctionne pour moi:
J'ai édité un peu:
toString()
sur unString
.encode(bytes)
méthode retourne déjà unString
(comme indiqué par d'autres, à l'appel de cette peut-être ce qui en résulte dans l'erreur)Base64.decode(stringToStore.getBytes())
)D'abord si vous utilisez ce mot de passe, il n'est pas recommandé de les convertir en Chaînes. À utiliser en tant que Chaîne de suivre le segment de code suivant
Base64.decode()
semble de retour d'unoctets\[\]
. L'appel detoString()
vous donne un peu de Java par défaut description de la matrice, rien de tel que "56AB0FC3...". Vous aurez besoin de faire cette conversion vous-même.De même de votre appel à
getBytes()
n'est pas en train de faire ce que vous pensez.J'ai essayé en Base64 de apache codec , et le résultat est très bien.
Pour décoder tableau d'octets qui contais base64 contenu que vous pouvez utiliser javax.xml.bind.DatatypeConverter. Il fonctionne assez bien. - Je l'utiliser pour décoder MongoDB valeurs de type binaire.