我得到了base64字符串(我无法控制我得到的字符串):
PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzYW1scDpSZXNwb25zZSB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIg==
当我用Java解码它时,它会产生:
<?xml version="1.0"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
当我对其进行base64编码时(同样在Java中),它会产生:
PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8c2FtbHA6UmVzcG9uc2UgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCI=
这些字符串不同,但它们应该相同。
在搜索过程中,我无意中发现了以下网站:
https://www.base64encode.org
在这个站点上,如果单击“编码”按钮,我会得到与java base64编码相同的结果。
然而,如果我没有点击“编码”按钮,而是点击“实时模式开启”按钮,我会得到我收到的原始base64编码字符串——这正是我想要的!
你知道我如何在自己的代码中实现这些相同的结果吗?
public String getEncodedSAMLMessage(String message) {
byte[] byteMessage;
try {
byteMessage = message.getBytes("UTF-8");
String base64Encoded = helpers.base64Encode(byteMessage);
return URLEncoder.encode(base64Encoded, "UTF-8");
} catch (UnsupportedEncodingException e1) {
}
return null;
}
public String getDecodedSAMLMessage(String message) {
String urlDecoded = helpers.urlDecode(message);
byte[] base64Decoded = helpers.base64Decode(urlDecoded);
try {
return new String(base64Decoded, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
return null;
}