http - mvc - websocket web api



generar "Sec-WebSocket-Accept" de "Sec-WebSocket-Key" (1)

Estoy siguiendo rfc6455 :

Concretamente, si como en el ejemplo anterior, | Sec-WebSocket-Key |
el campo de encabezado tenía el valor "dGhlIHNhbXBsZSBub25jZQ ==", el servidor
concatenaría la cadena "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
para formar la cadena "dGhlIHNhbXBsZSBub25jZQ == 258EAFA5-E914-47DA-95CA-
C5AB0DC85B11 ". El servidor tomaría el hash SHA-1 de esto,
dando el valor 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6
0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea. Este valor es
luego codificado en base64 (ver la Sección 4 de [RFC4648]), para dar el valor
"s3pPLMBiTxaQ9kYGzzhZRbK + xOo =". Este valor se repetiría en
el | Sec-WebSocket-Accept | campo de encabezado

y no se puede generar el "Sec-WebSocket-Accept" correcto.

Para entender el proceso estoy usando en línea SHA1 hash y Base64 Encode .

El hash SHA1 en línea para "dGhlIHNhbXBsZSBub25jZQ == 258EAFA5-E914-47DA-95CA-C5AB0DC85B11" proporciona el resultado correcto: "b37a4f2cc0624f1690f64606cf385945b2bec4ea" como se describe en rfc6455.

Pero la Base64 Encode en línea me da los resultados incorrectos "YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ ==" para la entrada "b37a4f2cc0624f1690f64606cf385945b2bec4ea". El resultado debería ser "s3pPLMBiTxaQ9kYGzzhZRbK + xOo ="

¿Qué estoy haciendo mal?


Necesitas codificar en base64 el resumen raw sha1.
Está codificando la representación de cadena hexadecimal del resumen, que es el doble de la longitud.

Las herramientas en línea funcionan con texto y no funcionan con datos binarios en bruto, por eso obtiene resultados incorrectos.

Ejemplo de Python:

import hashlib, base64
h = hashlib.sha1("dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
print "hexdigest:", h.hexdigest() # hexadecimal string representation of the digest
print "digest:", h.digest() # raw binary digest
print
print "wrong result:", base64.b64encode(h.hexdigest())
print "right result:", base64.b64encode(h.digest())

Esto imprime:

hexdigest: b37a4f2cc0624f1690f64606cf385945b2bec4ea
digest: ᄈzO,ÀbOミöFÏ8YEᄇᄒÄê

wrong result: YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==
right result: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=




webserver