Je veux créer un hachage de I love cupcakes
(signé avec la clé abcdeg
)
Comment puis-je créer ce hachage à l'aide de Node.js Crypto?
javascript
node.js
algorithm
hash
node-crypto
user847495
la source
la source
crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b))
: stackoverflow.com/questions/31095905/…Il y a quelques années, il a été dit que
update()
etdigest()
étaient des méthodes héritées et la nouvelle approche API de streaming a été introduite. Maintenant, les documents indiquent que l'une ou l'autre méthode peut être utilisée. Par exemple:Testé sur les nœuds v6.2.2 et v7.7.2
Voir https://nodejs.org/api/crypto.html#crypto_class_hmac . Donne plus d'exemples d'utilisation de l'approche de streaming.
la source
update
et nonwrite
. Je suis confus, quelle est la meilleure pratique maintenant? Je ne trouve pas de ressources qui le disent aussi clairement que vous le mentionnez.digest
etupdate
ont pas été dépréciée et sont présentés dans la documentation: nodejs.org/api/crypto.html#crypto_class_hmac . Je recommande d'utiliser l'API de flux uniquement si vous lisez à partir d'un flux.La solution de Gwerder ne fonctionnera pas car elle
hash = hmac.read();
se produit avant la finalisation du flux. D'où les problèmes d'AngraX. De plus, l'hmac.write
instruction n'est pas nécessaire dans cet exemple.Au lieu de cela, procédez comme suit:
Plus formellement, si vous le souhaitez, la ligne
pourrait être écrit
parce que dans cet exemple, le texte est une chaîne utf
la source
It is a stream that is both readable and writable. The written data is used to compute the hmac. Once the writable side of the stream is ended, use the read() method to get the computed digest.
Vous le lisez lorsque le côté accessible en écriture est terminé , vous n'avez même pas besoin d'attendre quand le côté accessible en lecture devient lisible (bien que ce soit sûrement le cas). Lisez votre documentation s'il vous plaît.hmac.end(...)
a été appelé, « terminé » signifie que le flux a déclenché son événement de fin , c'est pourquoi la commande accepte un rappel. Après l'appel de la méthode end (), le flux nécessite du temps pour vider les données vers le système sous-jacent. Si vous appelez read () avant que l'événement de fin ne soit déclenché, il échouera. Allez-y et passez le code de Gwerder dans JSbin et voyez par vous-même. Vous devriez lire la documentation Streams pour comprendre comment cela fonctionne.read()
lorsque le côté accessible en écriture est terminé, et il n'y a rien à propos de l'événement de fin.