Преобразовать байт [] в строковое 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 декодирует его обратно в исходный байтовый массив и сохраняет его, готово!

Другие вопросы по тегам