GAWKにWebソケットサーバーを作成する必要があります。サーバーは、RFCの次のアルゴリズムを介してユーザーのSec-WebSocket-Keyを処理する必要があります。
- キーを次に関連付けます。
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
- sha-1のバイナリ形式を使用します(20個の記号が必要です)。
- バイナリ形式からbase64を取得する
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=
私は何が間違っていましたか?
答え1
ここで、文字列コンストラクタは与えられた<<<…
文字列を提供します。改行文字を追加コマンドへの入力として。だからそれ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 …