Java String Base64 кодирует алгоритм для соответствия реализации OpenSSL
-
08-10-2019 - |
Вопрос
В рамках попытки настроить SAML AUTHN с устройством поиска Google, мне нужно преобразовать мой ответ на base64. Для доказательства концепции я только что использовал отладчик в Intellij Idex, чтобы заменить строку с помощью версии, создаваемой командой OpenSSL:
openssl base64 -in inFileName -out outFileName
Теперь мне нужно получить версию, работаю без моего прямого вмешательства. Я использую Apache Commons Base64. Библиотека кодеков (v. 1.4), Charset UTF-8, линейная длительность 64, а код выглядит так:
Base64 encoder = new Base64(64);
signedSamlResponse = signedSamlResponse.replaceAll("[\n\r]","");
byte[] bytes = encoder.encode(signedSamlResponse.getBytes("UTF-8"));
signedSamlResponse = new String(bytes,0,bytes.length);
Результат довольно близко к тому, что мне нужно. Если я сделаю шифрование OpenSSL на строке непосредственно до того, как библиотека Apache делает это (копировать fightedsamlresponse перед строкой 3 выполнения), а затем запустить разные результаты, которые они практически идентичны. Единственное отличие - это второй последний символ в последней строке, и эта разница была согласована во всех моих попытках.
Версия OpenSSL:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=
Версия Apache:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==
Что мне нужно сделать с массивом байтового байтового или строка, от которого приходит, чтобы получить два результата для соответствия?
Решение
Похоже, версия OpenSSL заканчивается « N» - поэтому удалив их все на второй строке, вы должны добавить один в конце :)
(В основном, массив байтов из OpenSSL имеет дополнительную 0x0a в конце; версия Apache, которую вы дали не.)