1

次のキーを使用して、正しいハンドシェイク応答文字列を計算しています
。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ハッシュ:0947fa630a5510d3546d5b4b20543275

ヘルプ!

4

2 に答える 2

3

これは、応答ハッシュを作成するためのPythonコードです。

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

この例では、num1とnum2はkey1とkey2の数値です。key3は、受信した実際のテキスト文字列(rawバイト)です。

struct.pack()呼び出しは、ビッグエンディアンモード(数値用)を使用しており、数値ごとに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を作成しました)の実際の実装(上記のコードが由来する場所)を参照してください。

于 2011-01-19T20:40:42.550 に答える
1

これが私のバージョンです:

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

スターゲートを使用する場合、その厄介なことはすべてあなたのために行われます:-)

于 2011-01-31T11:41:47.320 に答える