Estou tentando criar um servidor websocket escrito em node.js
Para fazer o servidor funcionar, preciso obter o hash SHA1 de uma string.
O que tenho que fazer é explicado na Seção 5.2.2 página 35 dos documentos .
NOTA: Por exemplo, se o valor do
"Sec-WebSocket-Key"
cabeçalho no handshake do cliente fosse"dGhlIHNhbXBsZSBub25jZQ=="
, o servidor acrescentaria a sequência"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
para formar a sequência"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
. O servidor então pegaria o hash SHA-1 desta string, dando o valor 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea. Esse valor é então codificado em base64, para fornecer o valor"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
, que seria retornado no"Sec-WebSocket-Accept"
cabeçalho.
fonte
Respostas:
Veja a
crypto.createHash()
função e os associadoshash.update()
ehash.digest()
funções:fonte
Obrigatório: SHA1 está quebrado , você pode calcular colisões SHA1 por 45.000 USD . Você deve usar
sha256
:Para responder à sua pergunta e fazer um hash SHA1:
Então:
ou
ou
Documentos oficiais do nó em
crypto.createHash()
fonte
Object.toString()
retorna[object Object]
por padrão. Entãosha1sum({})
===sha1sum({"foo":"bar"})
===sha1sum({"a":1})
, etc.sha1sum
é impreciso, dado o que você disse - isso claramente faz mais do que um sha1 normal faria. Renomeei a função na resposta.Por favor, leia e considere fortemente meu conselho nos comentários de sua postagem. Dito isso, se você ainda tiver um bom motivo para fazer isso, verifique esta lista de módulos criptográficos para o Node . Ele possui módulos para lidar com sha1 e base64.
fonte
Dicas para evitar problemas (hash ruim):
Podemos adicionar um argumento binário para usar a string de bytes.
Você pode tentar com: "\ xac", "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93", etc ...
Outras linguagens (Python, PHP, ...):
Nodejs:
fonte
'binary'
- Alias para'latin1'
nodejs.org/api/…binary
! Usarbinary
oulatin1
na codificação perderá informações e aumentará a probabilidade de colisões! Experimente o snippet acima com estes dois, por exemplo:❤
e⑤
Você pode usar:
Para instalar:
fonte