我给了一个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;
}
答案 0 :(得分:0)
尝试使用Apache Commons Codec。
import org.apache.commons.codec.Charsets;
import org.apache.commons.codec.binary.Base64;
public class Base64Encoder {
private Base64 b64 = new Base64();
public String encode(String message) {
return b64.encodeAsString(message.getBytes());
}
public String decode(String message) {
return new String(b64.decode(message), Charsets.UTF_8);
}
}