2017-08-29 10 views
0

Webソケット接続のためにSec-WebSocket-Acceptという値を生成するコードを記述しようとしています。私は、リソースのオンライン(すなわちMDN)から集めることはあなたということです:WebSocketハンドシェイクはどのようにPHPに実装されていますか?

  1. 連結したクライアントは、GUID(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)にSec-WebSocket-Keyであなたを送ったことを文字列。

  2. この連結の結果のSHA-1ハッシュを取ります。

  3. 私はこれを正しく理解してあれば、対応するPHPコードは次のようになり64

ベースにその結果を変換します

base64_encode(sha1($sec-websocket-key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); 

しかし、これは正しくありません。それは(すなわちMDNでのWebSocketキーのdGhlIHNhbXBsZSBub25jZQ==の値は、それがYjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==を返し、s3pPLMBiTxaQ9kYGzzhZRbK+xOo=を返し、私が書いたPHPコードを使用しなければならない)MDNに示す例と一致していません。

私はここで間違って何をしましたか?

答えて

1

sha1()関数は、40文字の16進形式(PHP Manual参照)ではなく、20文字のバイナリ形式で生のSHA-1ダイジェストを返すオプションの第2ブール型パラメータを受け入れます。

WebSocketハンドシェイクには、生のバイナリ形式が必要です。したがって、sha1()関数に2番目のパラメータを追加する必要があります。

base64_encode(sha1($sec-websocket-key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true)); 
+0

これは、問題を解決します。ありがとうございました。 – Toastrackenigma

関連する問題