当我尝试将头文件从jwt解析为base64到string时,输出为: { “ALG”: “RS256”, “典型”: “智威汤逊”, “孩子”: “1234”没有最后一个括号,但是当我解码相同的base64字符串时,例如:…
欢迎来到StackOverflow。 根据 这个 回答Github, DatatypeConverter.parseBase64Binary() 有一些错误,并没有输出正确的解码字符串。
DatatypeConverter.parseBase64Binary()
如果您使用的是Java 8或更高版本,则可以通过以下方式解码:
String base64 = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ"; byte[] temp = Base64.getDecoder().decode(base64.getBytes()); System.out.println(new String(temp));
导入类 java.util.Base64
java.util.Base64
尝试编码 {"alg":"RS256","typ":"JWT","kid":"1234"} 在 BASE64
{"alg":"RS256","typ":"JWT","kid":"1234"}
你会看见 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ==
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ==
== - 是的 填充
==
我认为这个问题是 DatatypeConverter.parseBase64Binary 使用表示 XSD:base64Binary的 (RFC 2045)。但在RFC 2045中,填充是强制性的。
DatatypeConverter.parseBase64Binary
你可以用这种方式(java.util.Base64):
public void test() { String encodedToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ"; System.out.println(new String(Base64.getDecoder().decode(encodedToken.getBytes()))); }
java.util.Base64使用RFC 4648(填充是可选的)。