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?
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. –
@Shawn: Je suggérais seulement d'ajouter '\ n' quand vous avez appelé le code Apache. –