Я пытаюсь кодировать и декодировать String с помощью android.util.Base64, но он дает плохую ошибку base-64.
Код с проблемой:
private byte[] base64ToByte(String str) throws IOException {
Log.i("encription", str);
byte[] returnbyteArray = Base64.decode(str, Base64.URL_SAFE);
return returnbyteArray;
}
Лог-код ошибки:
08-09 13:02:18.589: E/AndroidRuntime(29827): Process: com.example.maptest, PID: 29827
08-09 13:02:18.589: E/AndroidRuntime(29827): java.lang.IllegalArgumentException: bad base-64
08-09 13:02:18.589: E/AndroidRuntime(29827): at android.util.Base64.decode(Base64.java:161)
08-09 13:02:18.589: E/AndroidRuntime(29827): at android.util.Base64.decode(Base64.java:136)
08-09 13:02:18.589: E/AndroidRuntime(29827): at android.util.Base64.decode(Base64.java:118)
08-09 13:02:18.589: E/AndroidRuntime(29827): at com.example.maptest.security.Encription.base64ToByte(Encription.java:116)
08-09 13:02:18.589: E/AndroidRuntime(29827): at com.example.maptest.security.Encription.encode(Encription.java:103)
08-09 13:02:18.589: E/AndroidRuntime(29827): at android.os.Handler.dispatchMessage(Handler.java:102)
08-09 13:02:18.589: E/AndroidRuntime(29827): at android.os.Looper.loop(Looper.java:136)
08-09 13:02:18.589: E/AndroidRuntime(29827): at android.app.ActivityThread.main(ActivityThread.java:5081)
08-09 13:02:18.589: E/AndroidRuntime(29827): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 13:02:18.589: E/AndroidRuntime(29827): at java.lang.reflect.Method.invoke(Method.java:515)
08-09 13:02:18.589: E/AndroidRuntime(29827): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
08-09 13:02:18.589: E/AndroidRuntime(29827): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-09 13:02:18.589: E/AndroidRuntime(29827): at dalvik.system.NativeStart.main(Native Method)
Ввод (str String из кода) выглядит следующим образом:
08-09 13:02:18.539: I/encription(29827): 26.919047981500626
Это двойное преобразование в строку, используя:
String.valueOf(number)
Ошибка сохраняется со всеми флагами кодирования (DEFAULT, NO_WRAP и т.д.), любая помощь будет оценена, спасибо.
Вы пытаетесь декодировать 26.919047981500626
, который вы не можете. Потому что это не допустимая строка в кодировке base64.
Когда он помещается в этот онлайн-декодер base64, он дает эту ошибку:
Ввод не является допустимой строкой Base-64, так как содержит не базовый 64 символ, более двух отступов или недопустимый символ среди прописных символов.
Update:
Если вы хотите узнать правильное форматирование закодированной строки base64, взгляните на таблицу в статью в википедии, а также этот ответ, который показывает код проверки подлинности base64 в С#.
Это ударило меня, если в любом случае вы раскалываете данные и кодировку, а затем сначала декодируете их, прежде чем снова их связывать. Глупо, я делал декодирование после сортировки данных, которые оставили меня "bad-base-64" поскольку каждый блок данных кодирования имел концевые файлы (==).
Это Ссылка удобна в любом случае для проверки кодировки и декодирования.
Base64.NO_WRAP