В рамках попытки настроить SAML AuthN с помощью Google Search Appliance мне нужно преобразовать свой ответ в base64. Для доказательства концепции, я просто использовал отладчик в IntelliJ IDEA, чтобы заменить строку с версией, порожденной командой OpenSSL:Java String base64 кодирует алгоритм для соответствия реализации openssl
openssl base64 -in inFileName -out outFileName
Теперь мне нужно, чтобы получить версию работает без моего непосредственного вмешательства. Я использую Apache commons base64 кодека библиотеки (версия 1.4.), Кодировка UTF-8, lineLength 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 делает это (копия signedSamlResponse до выполнения строки 3), а затем запускайте diff, два результата они почти идентичны. Единственное различие - второй последний символ в последней строке, и это различие было последовательным во всех моих попытках.
Openssl версия:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=
Apache версии:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==
Что мне нужно сделать, чтобы массив байтов или строки это происходит от того, чтобы получить два результата, чтобы соответствовать?
Ну, добавив \ n в конец строки, изменили последние 4 символа строки Apache на «Pgo =», но он также изменил символы версии openssl на «PgoK». Тем не менее, чем-то странным, несмотря на то, что новая версия Apache соответствует старой версии openssl, GSA все еще только успешно декодирует openssl. Я боюсь, что что-то добавляется, когда я копирую и вставляю в gedit, чтобы сделать преобразование, но я не знаю, что это может быть. –
@Shawn: Я предлагал добавлять '\ n', когда вы вызывали код Apache. –