GAWK에 웹소켓 서버를 작성해야 합니다. 서버는 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 …