J'essaye de créer un serveur websocket écrit dans node.js
Pour que le serveur fonctionne, je dois obtenir le hachage SHA1 d'une chaîne.
Ce que je dois faire est expliqué dans la section 5.2.2 page 35 de la documentation .
Remarque: à titre d'exemple, si la valeur de l'en-
"Sec-WebSocket-Key"
tête dans la poignée de main du client était"dGhlIHNhbXBsZSBub25jZQ=="
, le serveur ajouterait la chaîne"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
pour former la chaîne"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
. Le serveur prendrait alors le hachage SHA-1 de cette chaîne, donnant la valeur 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea. Cette valeur est ensuite encodée en base64, pour donner la valeur"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
, qui serait retournée dans l'en-"Sec-WebSocket-Accept"
tête.
Réponses:
Voir la
crypto.createHash()
fonction et les fonctionshash.update()
ethash.digest()
fonctions associées :la source
Obligatoire: SHA1 est cassé , vous pouvez calculer les collisions SHA1 pour 45 000 USD . Vous devez utiliser
sha256
:Pour répondre à votre question et faire un hachage SHA1:
Ensuite:
ou
ou
Documentation du nœud officiel sur
crypto.createHash()
la source
Object.toString()
retourne[object Object]
par défaut. Doncsha1sum({})
===sha1sum({"foo":"bar"})
===sha1sum({"a":1})
, etc.sha1sum
est inexact étant donné ce que vous avez dit - cela fait clairement plus que ce que ferait un sha1 normal. J'ai renommé la fonction dans la réponse.Veuillez lire et tenir compte de mes conseils dans les commentaires de votre message. Cela étant dit, si vous avez encore une bonne raison de le faire, consultez cette liste de modules cryptographiques pour Node . Il a des modules pour traiter à la fois sha1 et base64.
la source
Conseils pour éviter les problèmes (mauvais hachage):
Nous pouvons ajouter un argument binaire pour utiliser la chaîne d'octets.
Vous pouvez essayer avec: "\ xac", "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93", etc ...
Autres langages (Python, PHP, ...):
Nodejs:
la source
'binary'
- Alias pour'latin1'
nodejs.org/apibinary
! Utiliserbinary
oulatin1
dans le codage perdra des informations et augmentera la probabilité de collisions! Essayez l'extrait ci-dessus avec ces deux exemples:❤
et⑤
Vous pouvez utiliser:
Pour installer:
la source