#java #ssl #encode #pkcs#12
#java #ssl #кодировать #pkcs #12
Вопрос:
У меня есть сценарий, в котором я получаю содержимое сертификата pkcs12 в виде закодированной строки (библиотека общих кодеков appache). Теперь я должен декодировать эту строку и сохранить ее в файле. Но при декодировании его как строки я получаю недопустимое содержимое сертификата.
Когда я пытаюсь записать байты в файл, он работает нормально. Пожалуйста, найдите фрагменты, которые я пробовал ниже.
Для кодирования:
Base64.encodeBase64String(certcontentInBytes[])
Для декодирования:
new String(Base64.decodeBase64(certstringContent));
Комментарии:
1. Привет всем, после нескольких отладок я узнал, что кодирование и декодирование base64 в appache использует формат iso_8859_1, но при моем преобразовании X509Certificate я использовал UTF-8, что вызывает проблему. При изменении evryting как iso_8859_1 он работает нормально
Ответ №1:
new String(bytes)
на самом деле new String(bytes, defaultCharset)
преобразует байты, используя кодировку байтов, в строку Unicode. Непереносимая и, вероятно, неправильная кодировка.
Для байтов в виде двоичных данных это не сработает. Строка не должна использоваться для двоичных данных. Бьюсь об заклад, байты были записаны в файл.
Комментарии:
1. да, при декодировании и записи в файл с декодированными байтами он работает хорошо. Но когда я пытаюсь преобразовать его в строку, он выдает недопустимую строку.
Ответ №2:
Возможно, вам нужно использовать new String(byte[], Charset charset)
правильную кодировку (вероятно, UTF-8), потому что в противном случае он будет использовать кодировку платформы, которая отличается между Windows и Linux / Unix. Интересно, почему вы не можете просто использовать массив байтов в качестве параметра?
Комментарии:
1. спасибо за ответ. Я даже пытался использовать эти возможности.
2. Не зная вашего кода: сохранение байтов в файл и последующее использование этого файла работает, но преобразование байтов в строку, и эта строка не работает — звучит почти так, как будто код, который вы используете, обрабатывает файлы и строки по-разному. Я настоятельно рекомендую вам обернуть свои байты в an
ByteArrayInputStream
и использовать их в качестве замены aFileInputStream
, которая (скорее всего) стоит за использованием файла.