Google 検索アプライアンスで SAML AuthN を設定する際に、応答を base64 に変換する必要があります。概念実証のために、IntelliJ IDEA のデバッガーを使用して、文字列を openssl コマンドによって生成されたバージョンに置き換えました。
openssl base64 -in inFileName -out outFileName
ここで、直接介入せずに機能するバージョンを取得する必要があります。私はApache commons base64コーデック ライブラリ (v. 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);
結果は私が必要とするものに非常に近いです。Apacheライブラリが実行する直前に文字列でopenssl暗号化を実行すると(3行目が実行される前にsignedSamlResponseをコピーします)、2つの結果がほぼ同じであるdiffを実行します。唯一の違いは、最後の行の最後から 2 番目の文字であり、この違いはすべての試行で一貫しています。
Openssl バージョン:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=
アパッチのバージョン:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==
2 つの結果を一致させるには、バイト配列またはその元の文字列に何をする必要がありますか?