2016-10-10 9 views
0

これまでの質問から、私はNTLMハンドシェイクを動作させました。私がバイト[]から文字列に変換するとき、私は空白を除外できません。私の結果は次のようになります。byte [] to文字列が正しく動作しない

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

USERNAME: A B C 

そして、これは、この出力を生成するコードです:

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.valueOf(t).isEmpty()またはString.valueOf(t).equals(" ")でチェック。 いつもそうじゃないと思われ、文字が印刷されています。私は一度にすべてを使った||誰もが本当に "正しい"です。

私は別のクラスから、このような入力を取得:

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は、私は私のトークンは次のようになります。この記事ではhttps://www.innovation.ch/personal/ronald/ntlm.html ようNTLM V3トークンを取得:TlRMTVNTUAADAAAAGAAYAHIAAAAYABgAigAAABQAFABAAAAADAAMAFQAAAASABIAYAAAAAAAAACiAAAAAYIAAFUAUgBTAEEALQBNAEkATgBPAFIAWgBhAHAAaABvAGQATABJAEcASABUAEMASQBUAFkArYfKbe/jRoW5xDxHeoxC1gBmfWiS5 + iX4OAN4xBKG/IFPwfH3agtPEia6YnhsADT – Nico

答えて

1

メッセージのユーザー名は、ISO-8859-1ではなくUTF-16LEでエンコードされています。

文字列に現在表示されているものは、間違ったデコードに由来するNUL文字です。

関連する問題