Input byte array has incorrect ending byte at 40

[亡魂溺海] 提交于 2020-06-24 20:54:09

问题


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?


回答1:


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)




回答2:


I was trying to use the strings from the args. I found that if I use arg[0].trim() that it made it work. eg

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

I guess there's some sort of whitespace that gets it messed up.




回答3:


Maybe too late, but I also had this problem.

By default, the Android Base64 util adds a newline character to the end of the encoded string.
The Base64.NO_WRAP flag tells the util to create the encoded string without the newline character.

Your android app should encode src something like this:

String encode = Base64.encodeToString(src.getBytes(), Base64.NO_WRAP);


来源:https://stackoverflow.com/questions/35292836/input-byte-array-has-incorrect-ending-byte-at-40

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!