2010-11-17 38 views
0

J'essaie de construire un serveur websocket en Java, mais j'ai des difficultés ... la spécification de websockets dit que vous devez concaténer les nombres de key1 et key2 puis concaténer les 8 octets supplémentaires de données à '. ..forme une chaîne de 128 bits dont la somme MD5 est puis utilisée par le serveur pour prouver qu'il a bien lu la prise de contact.WebSocket key1 + key2 + 8_byte_data! = 16 octets (128 bits)?

L'exemple key1 est 155.712.099 L'exemple key2 est 173.347.027 L'exemple 8 octets de données supplémentaires sont Tm [K T2u

'155712099173347027Tm [K T2u' est de 26 octets non 16 octets (128 bits) comme il est supposé être! Qu'est-ce que j'oublie ici? Je peux tout comprendre sur les Websockets, mais cette petite partie ici.

Répondre

1

Vous utilisez key1 et key2 comme une chaîne de chiffres au lieu de nombres de 32 bits. Par exemple, 155712099 en tant que nombre 32 bits hexadécimal est: 0x63, 0xfa, 0x47, 0x09 (0x947fa63). Par exemple, 155712099 est un nombre hexadécimal de 32 bits. C'est ce que tu veux. Vous devez convertir les chaînes key1 et key2 en entiers non signés, puis placer ces 4 octets dans la position 0 (pour key1) et la position 4 (pour key2) de votre tableau d'octets cible. Prendre 155712099 comme une chaîne de chiffres donnera une chaîne de 9 octets avec des valeurs hexadécimales: 0x31, 0x35, 0x35, 0x37, 0x31, 0x32, 0x30, 0x39, 0x39. D'autre part, vous voulez empaqueter les octets supplémentaires directement dans votre tableau d'octets cible à partir de la position 8. Cela devrait vous donner un tableau d'octets cible de 16 octets. Notez que l'établissement de liaison manipule intentionnellement les différents éléments de données en tant que types de données différents pour essayer de contrecarrer différents types d'attaques contre un serveur WebSockets.

+0

C'est tout! Je vous remercie! – Ben

1

Si key1 et key2 sont des entiers de 32 bits, vous devez probablement concaténer ensemble les représentations de chacun d'entre eux comme 4 octets chacun, et non leur représentation sous forme de chaîne.

+0

Pouvez-vous me montrer ce que vous voulez dire? :) – Ben