GAWKでWebSocketサーバーを作成する必要があります。また、サーバーは次のアルゴリズム(RFCから)によってユーザーのSec-WebSocket-Keyを処理する必要があります。
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
と連結しますOpensslを使用しようとしていますが、結果のコードが正しくありません。
$ openssl sha1 -binary <<< 'a0+ZvgYqsMFHRerif0go8g==258EAFA5-E914-47DA-95CA-C5AB0DC85B11' | openssl base64
mYryklMdRrrLwrMQDeKEzOVMMWk=
一方、次のPHPコードは、有効な出力を生成します。
$key = "a0+ZvgYqsMFHRerif0go8g==";
$hash = $key.'258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
$hash = sha1($hash,true);
$hash = base64_encode($hash);
echo($hash);
tswGtNOxrRhDmC04XQaDigMeaJA =
私は何が間違っているのですか?
Here文字列構文<<<…
は、コマンドへの入力として、指定された文字列および改行をフィードします。したがって、openssl sha1 -binary <<< 'a0+ZvgYqsMFHRerif0go8g==258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
はと同等です
printf '%s\n' 'a0+ZvgYqsMFHRerif0go8g==258EAFA5-E914-47DA-95CA-C5AB0DC85B11' | openssl sha1 -binary
ただし、仕様には「キーを258EAFA5-E914-47DA-95CA-C5AB0DC85B11と連結する」と記載されており、「キーを258EAFA5-E914-47DA-95CA-C5AB0DC85B11と改行と連結する」とは記載されていません。だからあなたは必要です
printf '%s' 'a0+ZvgYqsMFHRerif0go8g==258EAFA5-E914-47DA-95CA-C5AB0DC85B11' | openssl sha1 -binary
これにより、tswGtNOxrRhDmC04XQaDigMeaJA=
が生成されます。
echo -n …
はprintf %s …
と同等ですが、echo -n
をサポートしないシェル、またはecho …
でバックスラッシュエスケープを展開するシェルがある点が異なりますが、printf %s …
の動作は標準です。 (常に引数を文字通りに出力します)。