2011-06-16 97 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 ==」。