尝试使用Google Search Appliance配置SAML AuthN时,我需要将响应转换为base64。为了概念验证,我只使用IntelliJ IDEA中的调试器将字符串替换为openssl命令生成的版本:
openssl base64 -in inFileName -out outFileName
现在我需要在没有直接干预的情况下使用一个版本。我正在使用Apache commons base64编解码器库(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库之前对字符串进行openssl加密(在第3行执行之前复制signedSamlResponse),然后运行diff两个结果它们几乎相同。唯一的区别是最后一行中的倒数第二个字符,这种差异在我的所有尝试中都是一致的。
Openssl版本:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=
Apache版本:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==
我需要对字节数组或它来自的字符串做什么才能使两个结果匹配?
答案 0 :(得分:3)
看起来openssl版本以“\ n”结尾 - 所以在第二行删除它们,你应该在最后添加一个:)
(基本上,openssl的字节数组末尾有一个额外的0x0a;你给出的Apache版本没有。)