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 Key3: 54: 6d: 5b: 4b: 20: 54: 32: 75

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

Était-ce utile?

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: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top