Input byte array has incorrect ending byte at 40

toom picture toom · Feb 9, 2016 · Viewed 29.2k times · Source

I have a string that is base64 encoded. It looks like this:

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0=

Any online tool can decode this to the proper string which is {"bla1":"bla1","bla2":"bla2"}. However, my Java implementation fails:

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

I'm getting the following error:

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

What is wrong with my code?

Answer

toom picture toom · Feb 9, 2016

Okay, I found out. The original String is encoded on an Android device using android.util.Base64 by Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT);. It uses android.util.Base64.DEFAULT encoding scheme.

Then on the server side when using java.util.Base64 this has to be decoded with Base64.getMimeDecoder().decode(payload) not with Base64.getDecoder().decode(payload)