0

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 つの結果を一致させるには、バイト配列またはその元の文字列に何をする必要がありますか?

4

1 に答える 1

4

openssl のバージョンは "\n" で終わっているようです - 2 行目でそれらをすべて削除したら、最後に 1 つ追加する必要があります :)

(基本的に、openssl のバイト配列には最後に余分な 0x0a があります。指定した Apache バージョンにはありません。)

于 2010-11-10T22:47:39.343 に答える