У вас действительно есть несколько реализаций для 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