2010-11-17 159 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

相关问题