Domanda

Io sto usando i seguenti tasti per calcolare la stringa di risposta corretta stretta di mano:
Key1: 18x 6] 8vm; 54 * (5: {U1] 8 z [8
Key2: 1_ tx7X d Key3: 54: 6d: 5b: 4b: 20: 54: 32: 75

Ho calcolato i valori Key1 e Key2 di:
Key1: 0947fa63 (hex)
Key2: 0a5510d3

Comunque non sono sicuro su cosa fare dopo, da quello che ho potuto capire, è loro e MD5 è concatenare, ma che non sembra di capire cioè MD5 hash: 0947fa630a5510d3546d5b4b20543275

Aiuto!

È stato utile?

Soluzione

Questo è il codice Python per creare l'hash di risposta:

from hashlib import md5
import struct
....
hashed = md5(struct.pack('>II8s', num1, num2, key3)).digest()

Nell'esempio num1 e num2 sono i valori numerici di key1 e key2. key3 è la stringa di testo effettivo (byte grezzi) ricevuto.

La chiamata struct.pack () è utilizzando la modalità endian grande (per i valori numerici) e imballaggio loro 4 byte per ciascun numero seguito dalla stringa key3 8 byte (byte).

documentazione del modulo python struct.

La versione C sarebbe più simile a questo:

/* Pack it big-endian */
buf[0] = (num1 & 0xff000000) >> 24;
buf[1] = (num1 & 0xff0000) >> 16;
buf[2] = (num1 & 0xff00) >> 8;
buf[3] =  num1 & 0xff;

buf[4] = (num2 & 0xff000000) >> 24;
buf[5] = (num2 & 0xff0000) >> 16;
buf[6] = (num2 & 0xff00) >> 8;
buf[7] =  num2 & 0xff;

strncpy(buf+8, headers->key3, 8);
buf[16] = '\0';

md5_buffer(buf, 16, target);
target[16] = '\0';

glibc .

Per ulteriori riferimenti si può guardare le implementazioni di lavoro (dove il codice di cui sopra è venuto da) di websockify ( disclaimer:. ho scritto websockify)

Altri suggerimenti

Ecco la mia versione:

https://github.com/boothead/stargate/ blob / master / stargate / handshake.py # L104

Se si utilizza stargate allora tutta quella roba brutta è fatto per voi: -)

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