Websockets - Sec-WebSocket-Accept不匹配

时间:2012-02-23 12:09:09

标签: c++ websocket

我正在使用C ++编写websocket服务器,并且在计算Sec-WebSocket-Accept键时出现问题。我已经测试了sha1并且它生成了正确的值(我从维基百科示例中获取了字符串并得到了相同的哈希)并且我还发现了在线base64转换器来测试第二部分,它似乎正常工作。但正如我从其他问题中看到的那样,我的字符串太长了。

  std::string secKey =  readHeader(buffer,n,"Sec-WebSocket-Key");
  std::string magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";

  secKey.append(magic);
  unsigned char hash[20];
  char hexstring[41];

  sha1::calc(secKey.c_str(),secKey.length(),hash);
  sha1::toHexString(hash,hexstring);
  std::string encoded = base64_encode(reinterpret_cast<const unsigned char*>(hexstring) ,strlen(hexstring));

对于secKey =“4aRdFZG5uYrEUw8dsNLW6g ==”我得到编码值“YTYwZWRlMjQ4NWFhNzJiYmRjZTQ5ODI4NjUWMWNjNjE1YTM0MzZkNg ==”

1 个答案:

答案 0 :(得分:2)

我认为你可以跳过toHexString行,而base64编码20字节的哈希值。

sha1::calc(secKey.c_str(),secKey.length(),hash);
std::string encoded = base64_encode(reinterpret_cast<const unsigned char*>(hash), 20);

这就是我C++ server所做的事情,握手成功完成。