Теперь из предыдущего вопроса я получил рукопожатие NTLM. Теперь, когда я конвертирую из байта [] в строку, я не могу отфильтровать пробелы. Мой результат выглядит следующим образом:байт [] для строки не работает правильно
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 [], как это:
byte[] token = Base64.getDecoder().decode(msg);
Выход мне нужно это ABC. Может кто-нибудь сказать мне, почему моя процедура неправильная?
Вы уверены, что массив байтов закодирован в ISO-8859-1, а не UTF-16? – Henry
Вы пробовали посмотреть числовое значение вашего символа и сравнить его с ожидаемым числовым значением пробела? Также установка контрольной точки в вашей среде IDE может творить чудеса. –
@Henry я получаю маркер NTLM V3 как в этой статье https://www.innovation.ch/personal/ronald/ntlm.html Мой маркер выглядит примерно так: TlRMTVNTUAADAAAAGAAYAHIAAAAYABgAigAAABQAFABAAAAADAAMAFQAAAASABIAYAAAAAAAAACiAAAAAYIAAFUAUgBTAEEALQBNAEkATgBPAFIAWgBhAHAAaABvAGQATABJAEcASABUAEMASQBUAFkArYfKbe/jRoW5xDxHeoxC1gBmfWiS5 + iX4OAN4xBKG/IFPwfH3agtPEia6YnhsADT – Nico