Получение формата «java.io.IOException: Invalid keystore» после преобразования потока файлов .jks в строку в кодировке utf-8 и обратно в поток

1

Я получаю загруженный файл.jks в качестве входных данных в формате входного потока. Я конвертирую его в кодированную строку UTF-8 и сохраняю ее в переменной String, которую я намерен хранить в БД.
Чтобы преобразовать keyStoreString = IOUtils.toString(inputstream, "UTF-8") кодированную строку UTF-8, я использую: keyStoreString = IOUtils.toString(inputstream, "UTF-8")

Когда я снова преобразую его во входной поток, чтобы загрузить его в хранилище ключей, я получаю исключение

    KeyStore ks = null;
    ks = KeyStore.getInstance("JKS");
    char[] passwordArray = password.toCharArray();
    ks.load(IOUtils.toInputStream(keyStoreString, Constants.UTF_ENCODING),
            passwordArray);

Когда я напрямую использую входной поток, тогда код работает, означает, что входной поток, который я получаю, является правильным.
Может кто-нибудь, пожалуйста, скажите мне, если я делаю что-то неправильно здесь. Любая помощь будет оценена.

Теги:
utf-8
encoding

1 ответ

4
Лучший ответ

Я преобразовываю его в кодированную строку UTF-8 и сохраняю ее в переменной String

Не делай этого!

Некоторые байтовые последовательности не могут быть переведены на символы. Вместо этого сохраните как строковый формат, специально предназначенный для представления двоичного файла, например Base64.

  • 0
    Спасибо за указание на это. У меня сработало следующее keyStoreString = Base64.encodeBase64String (IOUtils.toByteArray (is)); и для декодирования ks.load (новый ByteArrayInputStream (Base64.decodeBase64 (keyStoreString)), passwordArray)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню