Вы используете key1 и key2 как строку цифр вместо 32-битных чисел.
Например, 155712099 в качестве шестнадцатеричного 32-разрядного числа: 0x63, 0xfa, 0x47, 0x09 (0x947fa63). Это то, что ты хочешь. Вам необходимо преобразовать строки key1 и key2 в целые числа без знака, а затем упаковать эти 4 байта в позицию 0 (для key1) и позицию 4 (для key2) целевого байтового массива.
Принимая 155712099 в качестве строки цифр, получится 9-байтовая строка с шестнадцатеричными значениями: 0x31, 0x35, 0x35, 0x37, 0x31, 0x32, 0x30, 0x39, 0x39. С другой стороны, вы хотите упаковать дополнительные байты непосредственно в целевой массив байтов, начиная с позиции 8. Это должно дать вам целевой массив байтов длиной 16 байтов.
Обратите внимание, что рукопожатие преднамеренно манипулирует различными элементами данных как разными типами данных, чтобы попытаться предотвратить различные типы атак на сервер WebSockets.