Java WebSocket键1+;键2+;8字节数据!=16字节(128位)?

Java WebSocket键1+;键2+;8字节数据!=16字节(128位)?,java,md5,websocket,bits,Java,Md5,Websocket,Bits,我正在尝试用Java构建websocket服务器,但是我遇到了困难。。。websockets的规范规定,您必须将key1和key2中的数字连接起来,然后将额外的8字节数据连接到“…形成一个128位字符串,其MD5和为 然后被服务器用来证明它读取了握手。” 示例key1是155712099 示例键2是173347027 示例8字节的额外数据是Tm[K T2u ‘155712099173347027Tm[K T2u’是26个字节,而不是16个字节(128位),就像它假设的那样!我在这里遗漏了什么 我

我正在尝试用Java构建websocket服务器,但是我遇到了困难。。。websockets的规范规定,您必须将key1和key2中的数字连接起来,然后将额外的8字节数据连接到“…形成一个128位字符串,其MD5和为 然后被服务器用来证明它读取了握手。”

示例key1是155712099 示例键2是173347027 示例8字节的额外数据是Tm[K T2u

‘155712099173347027Tm[K T2u’是26个字节,而不是16个字节(128位),就像它假设的那样!我在这里遗漏了什么


我可以“获取”关于WebSocket的所有信息,但这里只有这一小部分。

如果key1和key2是32位整数,您可能需要将它们的表示形式连接在一起,分别为4个字节,而不是它们的字符串表示形式。

您使用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服务器的不同类型的攻击