Вопрос

Я пытаюсь построить сервер WebSocket в Java, но у меня трудно ... Спецификация Websockets говорят, что вы должны объединить числа из Key1 и Key2, а затем объединить дополнительные 8 байтов данных для '... образуют 128-битную строку, сумма MD5, затем используется сервером, чтобы доказать, что он прочитал рукопожатие.

Пример Key1 составляет 155712099 Пример Ключ 2 - 173347027 Пример 8 байтов дополнительных данных TM [K T2U

155712099173347027TM [K T2U '- 26 байт не 16 байтов (128 бит), как оно должно быть! Что я здесь не хватает?

Я могу «получить все о Weandockets, но здесь здесь мало.

Это было полезно?

Решение

Вы используете Key1 и Key2 в виде строки цифр вместо 32-битных чисел.

Например, 155712099 в качестве гексидексимального 32-битного номера: 0x63, 0xfa, 0x47, 0x09 (0x947fa63). Это то, что ты хочешь. Вам необходимо преобразовать key1 и key2 строки в целые числа unsigned, а затем упаковывают эти 4 байта в положение 0 (для Key1) и положение 4 (для Key2) вашего целевого байтового массива.

Принимая 155712099 Как строка цифр приведет к 9 байтовой строке с шестнадцатеричными значениями: 0x31, 0x35, 0x35, 0x37, 0x31, 0x32, 0x30, 0x39, 0x39. С другой стороны, вы хотите упаковать дополнительные байты непосредственно в ваш целевой байтовый массив, начиная с позиции 8. Это должно дать вам целевой байтовый массив 16 Bytes долго.

Обратите внимание, что рукопожатие намеренно манипулирует различными элементами данных в качестве разных типов данных, чтобы попытаться использовать различные типы атак на сервере WebSockets.

Другие советы

Если Key1 и Key2 являются 32-разрядными целыми числами, вам, вероятно, надо объединять представления каждого из них как 4 байта каждого, а не их строковое представление.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top