2011-06-16 135 views
1

我想从Java中的身份验证标头解码Base64字符串。我确信发送的请求在身份验证头中有一个有效的Base64编码字符串。这里是我的解码码:Base64解码返回垃圾

HttpServletRequest request = (HttpServletRequest) req; 
byte[] test = new Base64().decode(request.getHeader("Authorization")); 

之前之后我尝试它,它看起来像这样解码我解码它看起来像这样Basic dXNlcjpmZGdmcw==

请求:«"qÕÍ•È陑™Ì

我不知道我是什么做错了,不管我使用什么解码工具,它总是最终看起来像胡言乱语。谢谢阅读。

+4

确保您传递给decode()的字符串以dXNl ...开头,而不是Basic。仅供参考,你问题中的字符串是:“user:fdgfs”。 – Olaf 2011-06-16 16:16:05

+1

http://base64decode.org/解码为用户:fdgfs所以它可能是字节数组字符串转换是搞砸了。 – Nick 2011-06-16 16:16:33

回答

1
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder(); 
System.out.println(new String(decoder.decodeBuffer("dXNlcjpmZGdmcw=="))); 

打印user:fdgfs。注意:Decode Base64 data in Java为更好的解决方案。你是否检查过返回的内容:

request.getHeader("Authorization") 

+0

我是一个白痴,在解码之前并没有从我的字符串中删除Basic,所以它试图解码“Basic dXNlcjpmZGdmcw ==”而不是“dXNlcjpmZGdmcw ==” – 2011-06-16 16:25:08

+0

请勿在代码中使用未公开的sun。*库。它可能不是下一个版本或不同的JVM实现,它可能会在不通知的情况下更改它的接口或规范。请记住,如果它是一个私人图书馆,只要我改变我的私人***依赖关系,就可以将它重构到我的心中。 – 2011-06-16 17:47:09

+0

@Software Monkey:你是对的,这就是为什么我指出了链接到[this](http://stackoverflow.com/questions/469695/decode-base64-data-in-java)问题*“为了更好的解决方案” *。我实际上复制了第一个答案来检查提供的Base64。 – 2011-06-16 18:21:00

0

那是因为你试图解码整个字符串“Basic dXNlcjpmZGdmcw ==”而不是 “dXNlcjpmZGdmcw ==”。