2010-11-10 3 views
0

В рамках попытки настроить 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== 

Что мне нужно сделать, чтобы массив байтов или строки это происходит от того, чтобы получить два результата, чтобы соответствовать?

ответ

3

Похоже версии OpenSSL заканчивается «\ п» - так устранив их всех на второй линии, вы должны добавить один в конце :)

(В основном, массив из OpenSSL имеет добавочный 0x0a в конце, версия Apache, которую вы указали, не делает.)

+0

Ну, добавив \ n в конец строки, изменили последние 4 символа строки Apache на «Pgo =», но он также изменил символы версии openssl на «PgoK». Тем не менее, чем-то странным, несмотря на то, что новая версия Apache соответствует старой версии openssl, GSA все еще только успешно декодирует openssl. Я боюсь, что что-то добавляется, когда я копирую и вставляю в gedit, чтобы сделать преобразование, но я не знаю, что это может быть. –

+0

@Shawn: Я предлагал добавлять '\ n', когда вы вызывали код Apache. –