作为尝试使用 Google Search Appliance 配置 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),然后运行 diff 两个结果,它们几乎相同。唯一的区别是最后一行中的倒数第二个字符,这种区别在我所有的尝试中都是一致的。
OpenSSL 版本:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=
阿帕奇版本:
dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==
为了使两个结果匹配,我需要对字节数组或它来自的字符串做什么?