Frage

Ich bin mit den folgenden Tasten den richtigen Handshake-Antwort-String zu berechnen:
Key1: 18x 6] 8VM; 54 * (5: {U1] 8 z [8
Key2: 1_ tx7X d Key3: 54: 6d: 5b: 4b: 20: 54: 32: 75

Ich habe Key1 und Key2 Werte berechnet:
Key1: 0947fa63 (hex)
Key2: 0a5510d3

Allerdings bin ich nicht sicher, was als nächstes zu tun, von dem, was ich sammeln kann, Sie verketten sie und MD5, aber das scheint nicht das heißt zu arbeiten, MD5-Hashing: 0947fa630a5510d3546d5b4b20543275

Hilfe

War es hilfreich?

Lösung

Dies ist der Python-Code, um die Antwort Hash für die Erstellung von:

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

Im Beispiel num1 und num2 sind die numerischen Werte von key1 und key2. key3 ist der eigentliche Text-String (raw Bytes) empfangen werden.

Die struct.pack () -Aufruf ist Big-Endian-Modus (für die numerischen Werte) und sie 4 Byte für jede Zahl, gefolgt von dem 8-Byte key3 string (Bytes) zu packen.

Sehen Sie die Dokumentation für die Python-Modul-Struktur.

Die C-Version wie folgt aussehen würde:

/* 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';

md5_buffer heißt in glibc .

Für weitere Referenz, die Sie bei Arbeits Implementierungen aussehen kann (wo der obige Code kam) von websockify ( Haftungsausschluss:. ich schrieb websockify)

Andere Tipps

Hier ist meine Version:

https://github.com/boothead/stargate/ Blob / Master / Sternentor / handshake.py # L104

Wenn Sie Sternentor verwenden dann all die bösen Dinge für Dich erledigt sind: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top