我正在尝试用Java构建一个websocket服务器,但我遇到了困难...... websockets的规范说你必须连接key1和key2中的数字,然后将额外的8个字节的数据连接到' ...形成一个128位字符串,其MD5总和为 然后由服务器用来证明它读取握手。
示例key1是155712099 示例key2是173347027 示例8字节的额外数据是Tm [K T2u
'155712099173347027Tm [K T2u'是26字节而不是16字节(128位),就像它假设的那样!我在这里缺少什么?
我可以'获得'关于websockets的所有内容,但这里有一小部分。
答案 0 :(得分:1)
如果key1和key2是32位整数,你可能需要将每个表示的表示连接在一起,每个表示为4个字节,而不是它们的字符串表示。
答案 1 :(得分:1)
您使用key1和key2作为数字字符串而不是32位数字。
例如,作为十六进制32位数的155712099是: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字节长的目标字节数组。
请注意,握手是故意将不同的数据元素作为不同的数据类型进行操作,以尝试阻止针对WebSockets服务器的不同类型的攻击。</ p>