作为尝试使用Google搜索设备配置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库进行此操作之前对字符串进行OPENSL加密(在第3行执行之前copy signedsamlresponse),然后运行两个结果,它们几乎相同。唯一的区别是最后一行的第二个角色,在我所有尝试中,这种差异一直是一致的。

OpenSSL版本:

dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=

Apache版本:

dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==

为了使两个结果匹配,我需要对字节数组或它来自的字符串做什么?

有帮助吗?

解决方案

看起来OpenSL版本以“ n”结尾 - 因此,将它们全部删除在第二行中,您应该在末尾添加一个:)

(基本上,openssl的字节数组在末尾具有额外的0x0a;您给出的Apache版本没有。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top