Pregunta

Estoy tratando de construir un servidor de WebSocket en Java, pero estoy teniendo dificultades ... la especificación de websockets decir que usted tiene que concatenar los números de key1 y clave2 luego concatenar el extra de 8 bytes de datos a ' ... formar una cadena de 128 bits cuya suma MD5 es a continuación, utiliza el servidor para probar que leyó el apretón de manos.'

El ejemplo key1 es 155712099 El ejemplo key2 es 173347027 El ejemplo 8 bytes de datos adicionales es Tm [K T2U

'155712099173347027Tm [K T2U' es de 26 bytes y no 16 bytes (128 bits), como se supone que debe ser! Lo que me estoy perdiendo aquí?

Me puede 'conseguir' todo sobre websockets pero esta pequeña parte aquí.

¿Fue útil?

Solución

Está utilizando key1 y clave2 como una cadena de dígitos en lugar de números de 32 bits.

Por ejemplo, 155712099 como un número de 32 bits hexadecimal es: 0x63, 0xFA, 0x47, 0x09 (0x947fa63). Eso es lo que quieres. Es necesario para convertir las cadenas key1 y Key2 en enteros sin signo y luego empacar esos 4 bytes en la posición 0 (por key1) y la posición 4 (para clave2) de la matriz de bytes de destino.

Tomando 155712099 como una cadena de dígitos se traducirá en una cadena de 9 bytes con valores hexadecimales: 0x31, 0x35, 0x35, 0x37, 0x31, 0x32, 0x30, 0x39, 0x39. Por otra parte usted quiere embalar los bytes adicionales directamente en su matriz de bytes diana de partida en la posición 8. Eso te dará una matriz de bytes objetivo de 16 bytes de longitud.

Tenga en cuenta que el apretón de manos es la manipulación intencionada de los diferentes elementos de datos como diferentes tipos de datos para probar y frustrar los diferentes tipos de ataques en contra de un servidor WebSockets.

Otros consejos

Si key1 y clave2 son enteros de 32 bits, es probable que necesite para concatenar juntos las representaciones de cada uno de los 4 bytes como cada uno, no su representación de cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top