2016-02-09 11 views
5

Ho una stringa codificata in base64. Ecco come si presenta:Base64: l'array di byte di input ha un byte di fine non corretto a 40

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0= 

Qualsiasi strumento online in grado di decodificare questo per la stringa corretta che è {"bla1":"bla1","bla2":"bla2"}. Tuttavia, la mia implementazione Java non riesce:

import java.util.Base64; 
System.out.println("payload = " + payload); 
String json = new String(Base64.getDecoder().decode(payload)); 

che sto ottenendo il seguente errore:

payload = eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0= 
java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 40 

Cosa c'è di sbagliato con il mio codice?

+0

[Impossibile riprodurre] (http://ideone.com/z07TWN), un carattere extra alla fine della stringa solleva quell'eccezione esatta ... –

+0

Ma da dove si ottiene la stringa codificata? come si passa alla variabile payload ?, perché come dici tu funziona ... l'ho appena testato con Java 8 e senza problemi. –

risposta

8

Ok, l'ho scoperto. La stringa originale è codificata su un dispositivo Android utilizzando android.util.Base64 entro il Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT);. Utilizza lo schema di codifica android.util.Base64.DEFAULT.

Poi sul lato server quando si utilizza java.util.Base64 questo deve essere decodificato con Base64.getMimeDecoder().decode(payload)non con Base64.getDecoder().decode(payload)

+0

Ha funzionato per me, grazie. –

0

stavo cercando di usare le stringhe dalle args. Ho trovato che se io uso arg[0].trim() che ha fatto funzionare. es.

Base64.getDecoder().decode(arg[0].trim()); 

Suppongo che ci sia una sorta di spazio bianco che viene incasinato.