Websocket Key1 + Key2 + 8_byte_data! = 16 байт (128 бит)?
Вопрос
Я пытаюсь построить сервер 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 байта каждого, а не их строковое представление.