我正在使用以下键来计算正确的握手响应字符串:
key1:18x 6] 8vm; 54 *(5:{u1] 8 z [8
KEY2:1_ TX7X D <NW 334J702)7] O}`0
Key3:54:6d:5b:4b:20:54:32:75

我已经计算了key1和key2的值:
KEY1:0947FA63(HEX)
KEY2:0A5510D3

但是,我不确定下一步该怎么做,从我可以收集的内容中,您将它们加入并MD5,但这似乎并没有奏效,即MD5 Hashing:0947FA630A5510D3546D5B4B2054B20543275

帮助!

有帮助吗?

解决方案

这是用于创建响应哈希的Python代码:

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

在示例中,num1和num2是key1和key2的数值。 Key3是接收到的实际文本字符串(RAW字节)。

struct.pack()调用使用Big Endian模式(对于数字值),并为每个数字打包4个字节,然后是8个字节Key3字符串(字节)。

看到 文档 对于Python结构模块。

C版本看起来更像是这样:

/* 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在 glibc.

有关进一步的参考,您可以查看工作实现(上述代码来自) WebSockify (免责声明:我写了WebSockify)。

其他提示

这是我的版本:

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

如果您使用星际之门,那么所有讨厌的事情都为您完成:-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top