Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;WebSocket服务器实现(接受密钥不匹配)_C++_Websocket - Fatal编程技术网

C++ C++;WebSocket服务器实现(接受密钥不匹配)

C++ C++;WebSocket服务器实现(接受密钥不匹配),c++,websocket,C++,Websocket,我试着搜索,但没有找到任何答案。 我正在用C++编写WebSoSk服务器,但不能让接受密钥工作。< /P> 这是我的密码: std::string magicKey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; key.append(magicKey); unsigned char* sha_str = SHA1(reinterpret_cast<const unsigned char*>(key.c_str()), key.length(

我试着搜索,但没有找到任何答案。 我正在用C++编写WebSoSk服务器,但不能让接受密钥工作。< /P> 这是我的密码:

std::string magicKey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
key.append(magicKey);   
unsigned char* sha_str = SHA1(reinterpret_cast<const unsigned char*>(key.c_str()), key.length(), nullptr);
std::string final = base64_encode(reinterpret_cast<const unsigned char*>(sha_str), strlen((char*)sha_str));
std::string magicKey=“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”;
附加键(magicKey);
unsigned char*sha_str=SHA1(reinterpret_cast(key.c_str())、key.length()、nullptr);
std::string final=base64_编码(reinterpret_cast(sha_str),strlen((char*)sha_str));
我使用的是openssl/sha.h

是否在末尾连接“=”

equalant perl代码用于验证您是否需要

    use Digest::SHA qw(sha1_base64);
    my $clientKey="xyz";
    my $specifcationGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
    my $fullWebSocketKey = "$clientKey$specifcationGUID";

    # dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
    #print "Fill socket key is $fullWebSocketKey\n";
    # 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 
    # 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea
    print sha1_base64($fullWebSocketKey) . "=";

但是在sha1和base64之后,它已经在末尾得到了“=”。它需要得到其中的两个??尝试将代码中的最后一个字符串与perl字符串进行比较,它们应该是相同的,因此请检查sha1字符串的长度是否应该是20。strlen(str)可能也是一个问题。所以sha_str应该有20个长度?如果strlen((char*)sha_str)没有返回20,那么它就错了吗?所以,我用了键末尾的“/n”,所以我删除了它并开始工作。