Преобразовать байт [] в строковое Java-шифрование Android
Я использую библиотеку JNCryptor для шифрования строки перед ее отправкой на мой сервер в виде зашифрованной строки. Вот мой код:
String teststring = "Hello World";
JNCryptor cryptor = new AES256JNCryptor();
byte[] plaintext = teststring.getBytes();
String password = "test";
try {
byte[] ciphertext = cryptor.encryptData(plaintext, password.toCharArray());
String a = new String(ciphertext);
return a;
} catch (CryptorException e) {
// Something went wrong
e.printStackTrace();
return "0";
}
Тем не менее, когда я отправляю свою строку "а" на сервер, она содержит кучу неузнаваемых символов. Я прочитал объяснение относительно этого:
Строка не является подходящим контейнером для двоичных данных, а зашифрованный текст - двоичными данными. Для любой данной кодировки символов не все байты и последовательности байтов представляют символы, и, когда обнаруживается непредставимый байт или последовательность, он преобразуется в некоторый символ ошибки. Очевидно, что этот символ ошибки не может быть преобразован обратно в уникальный байт или последовательность байтов (это отображение много-> одно).
Правильный ли этот совет? В таком случае, как мне правильно преобразовать byte[] в строку? Чтобы я мог легко хранить его на моем сервере?
1 ответ
Не существует стандартного способа преобразования байтового массива в строку. Вы должны кодировать массив байтов. Распространенный способ сделать это - кодировка base64. Для объяснения того, как работает кодировка base64: http://en.wikipedia.org/wiki/Base64
Затем, как только он попадет на ваш сервер, base64 декодирует его обратно в исходный байтовый массив и сохраняет его, готово!