Domanda

Sto cercando di costruire un server websocket in Java, ma sto avendo difficoltà ... la specificazione di WebSockets dire che hai per concatenare i numeri da key1 e key2 poi concatenare le extra di 8 byte di dati a ' ... formare una stringa 128 bit la cui somma è MD5 poi utilizzato dal server per dimostrare che leggere la stretta di mano '.

L'esempio key1 è 155.712.099 L'esempio è key2 173.347.027 L'esempio 8 byte di dati supplementari sono Tm [K T2U

'155712099173347027Tm [K T2U' è 26 non byte 16 byte (128 bit), come si supponga di essere! Che cosa mi manca qui?

I puo 'ottenere' tutto di WebSockets, ma questa piccola parte qui.

È stato utile?

Soluzione

Si utilizza key1 e key2 come una stringa di cifre invece di numeri a 32 bit.

Per esempio, 155712099 come esadecimale numero a 32 bit è: 0x63, 0xfa, 0x47, 0x09 (0x947fa63). Questo è ciò che vuoi. È necessario convertire le stringhe key1 e Key2 in numeri interi senza segno e poi confezionare quei 4 byte in posizione 0 (per key1) e la posizione 4 (per key2) dell'array di destinazione di byte.

Prendendo 155712099 come una stringa di cifre si tradurrà in una stringa di 9 byte con valori esadecimali: 0x31, 0x35, 0x35, 0x37, 0x31, 0x32, 0x30, 0x39, 0x39. D'altra parte si vuole mettere in valigia i byte in più direttamente nel tuo array di byte di destinazione a partire dalla posizione 8. Questo dovrebbe dare un array di byte obiettivo a lungo 16 byte.

Si noti che la stretta di mano è intenzionalmente manipolando i diversi elementi di dati come diversi tipi di dati per cercare di contrastare diversi tipi di attacchi contro server WebSockets.

Altri suggerimenti

Se key1 e key2 sono interi a 32 bit, probabilmente avete bisogno di concatenare assieme le rappresentazioni di ciascuno di coloro che come 4 byte ciascuno, non la loro rappresentazione di stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top