2016-10-10 161 views
0

現在從上一個問題我得到了NTLM握手的工作。現在,當我從字節[]轉換爲字符串時,我無法過濾掉空格。我的結果是這樣的:byte [] to String not working correctly

CHAR: A 
CHAR: 
CHAR: B 
CHAR: 
CHAR: C 

USERNAME: A B C 

這是生產這種輸出的代碼:我即使String.valueOf(t).isEmpty()String.valueOf(t).equals(" ")檢查

username = new String(token, offset, length, "ISO-8859-1"); 
username = username.trim(); 

char[] test = username.toCharArray(); 
for (char t : test) 
{ 
    if (!Character.isWhitespace(t)) 
    { 
    System.out.println("CHAR: " + t); 
    } 
} 
System.out.println("USERNAME: " + username); 

。 所有的時間似乎並非如此,並打印字符。我甚至用||一次全部使用||但每個人都確實是「正確的」。

我得到這樣的輸入從其它類:

String auth = httpServletRequest.getHeader("Authorization"); 
String username = authService.getUserNameFromNTLM(auth.substring(5)); 

和字符串轉換爲字節[像這樣]:

byte[] token = Base64.getDecoder().decode(msg); 

我需要的輸出是ABC。有人可以告訴我爲什麼我的程序錯了嗎?

+2

你確定字節數組是編碼在ISO-8859-1而不是UTF-16嗎? – Henry

+2

您是否嘗試過查看char的數值並將其與預期的空間數值進行比較?在你的IDE中設置一個斷點也可能會產生奇蹟。 –

+0

@Henry我得到一個NTLM V3令牌喜歡這篇文章https://www.innovation.ch/personal/ronald/ntlm.html 我的令牌看起來是這樣的:TlRMTVNTUAADAAAAGAAYAHIAAAAYABgAigAAABQAFABAAAAADAAMAFQAAAASABIAYAAAAAAAAACiAAAAAYIAAFUAUgBTAEEALQBNAEkATgBPAFIAWgBhAHAAaABvAGQATABJAEcASABUAEMASQBUAFkArYfKbe/jRoW5xDxHeoxC1gBmfWiS5 + iX4OAN4xBKG/IFPwfH3agtPEia6YnhsADT – Nico

回答

1

消息中的用戶名以UTF-16LE而非ISO-8859-1編碼。

你目前在字符串中看到的是來自錯誤解碼的NUL字符。