Pregunta

Estoy usando las teclas siguientes para calcular la cadena de respuesta correcta apretón de manos:
Botón1: 18x 6] 8vM; 54 * (5: {U1] 8 z [8
Key2: 1_ tx7X d Key3: 54: 6d: 5b: 4b: 20: 54: 32: 75

He calculado los valores Key1 y de Key2:
Key1: 0947fa63 (hex)
Key2: 0a5510d3

Sin embargo no estoy seguro de qué hacer a continuación, a partir de lo que he entendido, que ellos y MD5 se concatena, pero eso no parece funcionar es decir, Hash MD5: 0947fa630a5510d3546d5b4b20543275

Ayuda!

¿Fue útil?

Solución

Este es el código Python para crear el hash respuesta:

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

En el ejemplo num1 y num2 son los valores numéricos de key1 y key2. key3 es la cadena de texto real (bytes sin formato) recibido.

El struct.pack () es utilizar el modo endian grande (para los valores numéricos) y los de embalaje 4 bytes para cada número seguido de la cadena key3 de 8 bytes (bytes).

Consulte la documentación href="http://docs.python.org/library/struct.html" para el módulo Python estructura.

La versión C se vería más como esto:

/* 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 es decir en glibc .

Para mayor referencia se puede ver en las implementaciones de trabajo (donde el código anterior viene) de websockify ( exención de responsabilidad:. escribí websockify)

Otros consejos

Aquí está mi versión:

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

Si utiliza puerta estelar entonces todas esas cosas desagradables se hace para usted: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top