Java String Base64 кодирует алгоритм для соответствия реализации OpenSSL

StackOverflow https://stackoverflow.com/questions/4149847

Вопрос

В рамках попытки настроить 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, которую вы дали не.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top