2010-11-10 14 views
0

Dans le cadre de la tentative de configuration de SAML AuthN avec Google Search Appliance, je dois convertir ma réponse en base64. Pour preuve de concept, je viens d'utiliser le débogueur dans IntelliJ IDEA pour remplacer la chaîne avec une version générée par la commande OpenSSL:Algorithme de codage Java base64 pour correspondre à l'implémentation d'openssl

openssl base64 -in inFileName -out outFileName 

Maintenant, je dois obtenir une version de travail sans mon intervention directe. J'utilise la bibliothèque codec Apache commons base64 (v 1.4.), Charset UTF-8, longueurLigne 64, et le code ressemble à ceci:

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); 

Le résultat est assez proche de ce que j'ai besoin. Si je fais un cryptage openssl sur la chaîne juste avant que la bibliothèque Apache ne le fasse (copie signedSamlResponse avant l'exécution de la ligne 3), puis exécute un diff les deux résultats sont presque identiques. La seule différence est le deuxième dernier caractère de la dernière ligne et cette différence a été constante dans toutes mes tentatives.

OpenSSL version:

dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo= 

Apache version:

dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg== 

Que dois-je faire pour le tableau d'octets ou la chaîne il vient afin d'obtenir les deux résultats correspondent?

Répondre

3

Il ressemble à la version OpenSSL se termine par un « \ n » - afin de les avoir enlevé tous sur votre deuxième ligne, vous devez ajouter un à la fin :)

(En gros, le tableau d'octets de OpenSSL a Et bien, en ajoutant le \ n à la fin de la chaîne, les 4 derniers caractères de la chaîne Apache ont été remplacés par "Pgo =" mais la version d'Apache que vous avez donnée ne l'est pas.)

+0

il a également changé les caractères de la version openssl en "PgoK". Plus étrange que cela, malgré le fait que la nouvelle version Apache correspond à l'ancienne version openssl, le GSA ne décode que l'openssl avec succès. Je crains que quelque chose ne soit ajouté quand je copie et colle à gedit afin de faire la conversion, mais je n'ai aucune idée de ce que cela pourrait être. –

+0

@Shawn: Je suggérais seulement d'ajouter '\ n' quand vous avez appelé le code Apache. –