Я пишу приложение, которое делает следующее с заданной строкой str:
encode(encrypt(encode(stringToBytearray(str))));
Сервер получает строку в кодировке Base64, которая затем декодируется -> расшифровывается -> декодируется, чтобы получить отправленную строку str из приложения.
К сожалению, это не работает для всех строк, длинные строки приводят к длинной строке Base64, и мой сервер выдает следующее исключение:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 5b
at java.util.Base64$Decoder.decode0(Base64.java:714)
at java.util.Base64$Decoder.decode(Base64.java:526)
at Main.decode(Main.java:113)
at Main.main(ain.java:33)
Строка имеет формат «[строка, строка, ..., строка]» без «s.
Как я упоминал выше, для не слишком длинных строк (извините, я пока не могу определить длину) это работает. Так что я думаю, что реализовал это правильно.
Что странно, если я его не отправлю, а расшифрую(расшифрую(декодирую(stringToBytearray(str))))); Строка на самом устройстве, все работает отлично.
Моя установка: JDK 7, eclipse (adt-bundle, разработка для Android) (Windows 7)
JDK 8, eclipse («нормальная» Java) (Linux (xubuntu))
Это потому, что оба класса (Base64) реализованы по-разному? Если да, то как я могу заставить его работать?
Вот методы кодирования/декодирования:
Кодировка (Устройство: в Windows 7, adt-bundle, Android-Dev, jdk 7):
import android.util.Base64
public byte[] encode(byte[] bytearrayToEncode){
return Base64.encode(bytearrayToEncode, Base64.NO_WRAP|Base64.URL_SAFE);
}
Декодирование (сервер: на Linux, jdk 8):
import java.util.Base64
public byte[] decode(byte[] bytearrayToEncode){
return Base64.getUrlDecoder().decode(bytearrayToDecode);
}
Все строки де-/кодируются с использованием одной и той же кодировки (utf-8)! Кодирование/декодирование: Base64
Криптовалюта: AES
Если вам нужна дополнительная информация, просто спросите, но я думаю, что предоставил всю необходимую информацию.
Редактировать:
public String bytearrayToString(byte[] bytearray){
String str = null;
try {
str = new String(bytearray, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
public byte[] stringToBytearray(String str){
byte[] bytearray = null;
try {
bytearray = str.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bytearray;
}