Próbuję utworzyć serwer websocket napisany w node.js.
Aby serwer działał, potrzebuję skrótu SHA1 ciągu.
To, co muszę zrobić, zostało wyjaśnione w sekcji 5.2.2 na stronie 35 dokumentacji .
UWAGA: Na przykład, jeśli wartość
"Sec-WebSocket-Key"
nagłówka w uzgadnianiu klienta"dGhlIHNhbXBsZSBub25jZQ=="
byłaby, serwer dołączyłby łańcuch,"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
aby utworzyć ciąg"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
. Następnie serwer pobierze skrót SHA-1 tego ciągu, dając wartość 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea. Ta wartość jest następnie zakodowana w formacie base64, aby uzyskać wartość"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
, która zostanie zwrócona w"Sec-WebSocket-Accept"
nagłówku.
źródło
Odpowiedzi:
Zobacz
crypto.createHash()
funkcję i powiązanehash.update()
ihash.digest()
funkcje:źródło
Obowiązkowe: SHA1 jest zepsute , możesz obliczyć kolizje SHA1 za 45 000 USD . Powinieneś użyć
sha256
:Aby odpowiedzieć na twoje pytanie i utworzyć skrót SHA1:
Następnie:
lub
lub
Oficjalna dokumentacja węzła
crypto.createHash()
źródło
Object.toString()
zwracane[object Object]
. A więcsha1sum({})
===sha1sum({"foo":"bar"})
===sha1sum({"a":1})
, itd.sha1sum
jest niedokładne, biorąc pod uwagę to, co powiedziałeś - to najwyraźniej robi więcej niż normalny sha1. W odpowiedzi zmieniłem nazwę funkcji.Proszę przeczytać i mocno rozważyć moje rady w komentarzach do Twojego postu. Biorąc to pod uwagę, jeśli nadal masz dobry powód, aby to zrobić, sprawdź tę listę modułów kryptograficznych dla Node . Posiada moduły do obsługi zarówno sha1, jak i base64.
źródło
Wskazówki dotyczące zapobiegania problemom (zły hash):
Możemy dodać argument binarny, aby użyć ciągu bajtów.
Możesz spróbować z: „\ xac”, „\ xd1”, „\ xb9”, „\ xe2”, „\ xbb”, „\ x93” itd ...
Inne języki (Python, PHP, ...):
Nodejs:
źródło
'binary'
- Alias dla'latin1'
nodejs.org/api/…binary
! Użyciebinary
lublatin1
w kodowaniu spowoduje utratę informacji i zwiększy prawdopodobieństwo kolizji! Wypróbuj powyższy fragment z tymi dwoma, na przykład:❤
i⑤
Możesz użyć:
Do zainstalowania:
źródło