2010-11-17 59 views
0

我想在Java中構建一個websocket服務器,但是我遇到了困難...... websocket的規範說你必須連接key1和key2的數字,然後連接多餘的8個字節的數據到'。 ..形成一個128位的字符串,其MD5總和爲 ,然後由服務器用來證明它讀取握手。WebSocket key1 + key2 + 8_byte_data!= 16字節(128位)?

示例KEY1是155712099 示例KEY2是173347027 示例8個字節的額外數據的爲Tm [K T2U

'155712099173347027Tm [K T2U' 是26個字節不是16個字節(128位)像它應該是!我在這裏錯過了什麼?

我可以'得到'關於websockets的所有內容,但是這裏有一小部分。

回答

1

您正在使用key1和key2作爲一串數字而不是32位數字。

例如,155712099作爲十六進制32位數字是:0x63,0xfa,0x47,0x09(0x947fa63)。那就是你想要的。您需要將key1和key2字符串轉換爲無符號整數,然後將這4個字節打包到目標字節數組的位置0(對於key1)和位置4(對於key2)。

以155712099作爲一串數字將生成一個9字節的字符串,其值爲十六進制值:0x31,0x35,0x35,0x37,0x31,0x32,0x30,0x39,0x39。另一方面,您確實希望將多餘的字節直接打包到位置8開始的目標字節數組中。這應該會給您一個長度爲16個字節的目標字節數組。

請注意,握手故意將不同的數據元素作爲不同的數據類型操作,試圖阻止對WebSocket服務器的不同類型的攻擊。

+0

就是這樣!謝謝! – Ben 2010-11-17 05:28:23

1

如果key1和key2是32位整數,那麼您可能需要將每個的表示連接在一起,每個表示爲4個字節,而不是它們的字符串表示。

+0

你能告訴我你的意思嗎? :) – Ben 2010-11-17 03:39:42

相關問題