Как узнать, какой вариант Java-класса кодирования Base64 используется? - PullRequest
0 голосов
/ 01 мая 2018

В моей Java-программе я использую класс com.ibm.xml.enc.dom.Base64 для кодирования / декодирования
бинарные файлы. Как я могу узнать, какой вариант кодировки Base64 использует этот класс?

1 Ответ

0 голосов
/ 06 мая 2018

У вас действительно есть несколько реализаций для base64.

Идея, лежащая в основе этого кодирования, состоит в том, чтобы найти способ переноса необработанных байтов через различные сетевые уровни без их изменения. Каждый слой читает байты, и вы не хотите, чтобы ваши необработанные данные были обрезаны (повреждены), потому что случайная последовательность байтов интерпретируется как «конец запроса». Вот почему данные приложения кодируются как печатные символы. (подробнее: http://www.comptechdoc.org/independent/networking/protocol/protlayers.html)

Большинство таблиц Base64 используют A-Z, a-z и 0-9 для 62 первых символов. И различия между реализациями заключаются в последних 2 символах и в дополнительном.

В наиболее распространенных реализациях используются + и / для последних двух символов таблицы. Но вы также можете найти - и _, которые раньше были безопасны для URL.

Для вашего класса com.ibm.xml.enc.dom.Base64 в документе ничего не указано: https://www.ibm.com/support/knowledgecenter/en/SSYKE2_6.0.0/com.ibm.java.security.api.doc/xmlsec/com/ibm/xml/enc/dom/Base64.html#Base64()

Таким образом, вы можете предположить, что они используют наиболее распространенную реализацию для Base64. Если у вас есть сомнения, просто попробуйте сгенерировать пример со случайными необработанными байтами. Вы можете дважды проверить, что base64 использует + и / или 63 и 64 символа.

Если вам нужно написать универсальный декодер base64, способный обрабатывать различные варианты bas64. Вам нужно будет проверить наличие этих специальных символов, проверить длину строки и символы, используемые для заполнения. Из этой информации вы можете вывести реализацию, которая будет использоваться.

У вас есть намного больше деталей о вариантах в Википедии: https://en.wikipedia.org/wiki/Base64

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...