代码之家  ›  专栏  ›  技术社区  ›  Ben

websocket key1+key2+8_字节_数据!=16字节(128位)?

  •  0
  • Ben  · 技术社区  · 14 年前

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

    示例键1是155712099 示例键2是173347027 示例8字节的额外数据是tm[k t2u

    '155712099173347027tm[k t2u'是26个字节,而不是16个字节(128位),就像它应该的那样!我这里缺什么?

    除了这一小部分,我可以“得到”关于WebSockets的所有信息。

    2 回复  |  直到 14 年前
        1
  •  1
  •   kanaka    14 年前

    您使用key1和key2作为数字串,而不是32位数字。

    例如,155712099作为十六进制32位数字是:0x63、0xFA、0x47、0x09(0x947FA63)。这就是你想要的。您需要将key1和key2字符串转换为无符号整数,然后将这4个字节打包到目标字节数组的位置0(对于key1)和位置4(对于key2)。

    将155712099作为一个数字串将产生一个十六进制值为:0x31、0x35、0x35、0x37、0x31、0x32、0x30、0x39、0x39的9字节字符串。另一方面,您确实希望将额外的字节直接打包到从位置8开始的目标字节数组中。这将为您提供一个16字节长的目标字节数组。

    请注意,握手有意将不同的数据元素作为不同的数据类型来操作,以尝试阻止针对WebSockets服务器的不同类型的攻击。

        2
  •  1
  •   Yuliy    14 年前

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