Websocket (projet 76) difficultés poignée de main!
Question
J'utilise les touches suivantes pour calculer la chaîne de réponse correcte poignée de main:
Key1: 18x 6] 8vm; 54 * (5: {U1] 8 z [8
Key2: 1_ tx7X d
Je l'ai calculé les valeurs de cle1 et Touche2:
Key1: 0947fa63 (hex)
Key2: 0a5510d3
Cependant, je ne suis pas sûr de ce qu'il faut faire, de ce que je peux comprendre, vous les et MD5, mais concaténer qui ne semble pas travailler à savoir hachage MD5: 0947fa630a5510d3546d5b4b20543275
Aide
La solution
Ceci est le code python pour créer le hachage de réponse:
from hashlib import md5
import struct
....
hashed = md5(struct.pack('>II8s', num1, num2, key3)).digest()
Dans l'exemple num1 et num2 sont les valeurs numériques de cle1 et key2. key3 est la chaîne textuelle réelle (octets bruts) reçus.
Le struct.pack () est appel en utilisant le mode big endian (pour les valeurs numériques) et les emballer 4 octets pour chaque numéro suivi de la chaîne de key3 8 octets (bytes).
Voir la Documentation pour le module struct python.
La version C ressemblerait plus à ceci:
/* 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 .
Pour référence plus loin, vous pouvez regarder les implémentations de travail (où le code ci-dessus est venu de) de websockify ( Avertissement:. J'ai écrit websockify)
Autres conseils
Voici ma version:
https://github.com/boothead/stargate/ blob / maître / stargate / handshake.py # L104
Si vous utilisez stargate alors toutes ces choses désagréables est fait pour vous: -)