Java String base64は、AlgorithmをエンコードしてOpenSSLの実装に一致させます
-
08-10-2019 - |
質問
Google SearchアプライアンスでSAML Authnを構成しようとする一環として、応答をBase64に変換する必要があります。概念実証のために、私はIntellijのアイデアでデバッガーを使用して、文字列をOpenSSLコマンドによって生成されたバージョンに置き換えました。
openssl base64 -in inFileName -out outFileName
今、私は直接的な介入なしにバージョンを機能させる必要があります。私は使用しています Apache Commons Base64 Codec Library(v。1.4)、Charset 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 Libraryが行う直前に文字列でOpenSSL暗号化を行うと(行3が実行される前にsignedSamlResponseをコピー)、2つの結果をほぼ同一である2つの結果を実行します。唯一の違いは、最後の行で2番目の最後のキャラクターであり、この違いは私のすべての試みで一貫しています。
OpenSSLバージョン:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=
Apacheバージョン:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==
2つの結果を一致させるために、バイト配列またはそれが来る文字列に何をする必要がありますか?
解決
OpenSSLバージョンは「 n」で終了するように見えます。したがって、2行目でそれらをすべて削除したので、最後に追加する必要があります:)
(基本的に、OpenSSLのバイト配列には、最後に追加の0x0Aがあります。
所属していません StackOverflow