2013-02-26 63 views
1

我試過搜索,但沒有找到答案。 我正在C++中製作websocket服務器,但我無法獲得接受密鑰的工作。C++ WebSocket服務器實現(接受密鑰錯位)

這裏是我的代碼:

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)); 

而且我使用openssl/sha.h

回答

0

你串聯 「=」,在結束了嗎?

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) . "="; 
+0

但SHA1和BASE64後,它已經得到了「=」結尾。它需要獲得2個? – 2013-02-27 09:50:25

+0

嘗試比較你的代碼中的最後一個字符串與perl之一,它們應該是相同的 – 2013-02-27 09:55:02

+0

另外請檢查sha1字符串的長度應該是20. strlen(str)也可能是一個問題。 – 2013-02-27 10:02:57