Ich möchte einen Hash von I love cupcakes
(mit dem Schlüssel signiert abcdeg
) erstellen.
Wie kann ich diesen Hash mit Node.js Crypto erstellen?
javascript
node.js
algorithm
hash
node-crypto
user847495
quelle
quelle
crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b))
: stackoverflow.com/questions/31095905/…Vor ein paar Jahren hieß es, dass
update()
unddigest()
Legacy - Methoden und die neue Streaming - API - Ansatz eingeführt waren. Jetzt sagen die Dokumente, dass beide Methoden verwendet werden können. Beispielsweise:Getestet auf Knoten v6.2.2 und v7.7.2
Siehe https://nodejs.org/api/crypto.html#crypto_class_hmac . Gibt weitere Beispiele für die Verwendung des Streaming-Ansatzes.
quelle
update
und nichtwrite
. Ich bin verwirrt, was ist jetzt die beste Vorgehensweise? Ich kann keine Ressourcen finden, die das so deutlich sagen, wie Sie es erwähnen.digest
undupdate
sind nicht veraltet und werden in der Dokumentation vorgestellt: nodejs.org/api/crypto.html#crypto_class_hmac . Ich empfehle, die Stream-API nur zu verwenden, wenn Sie aus einem Stream lesen.Die Lösung von Gwerder funktioniert nicht, da
hash = hmac.read();
dies geschieht, bevor der Stream fertiggestellt ist. Also die Probleme von AngraX. Auch derhmac.write
Anweisung ist in diesem Beispiel nicht erforderlich.Tun Sie stattdessen Folgendes:
Formaler, wenn Sie möchten, die Linie
könnte geschrieben werden
weil in diesem Beispiel Text eine utf-Zeichenfolge ist
quelle
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.
Sie lesen es, wenn die beschreibbare Seite beendet ist. Sie müssen nicht einmal warten, bis die lesbare Seite lesbar wird (obwohl dies sicherlich der Fall ist). Lesen Sie bitte Ihre Dokumentation.hmac.end(...)
aufgerufen wurde. " beendet " bedeutet, dass der Stream sein Endereignis ausgelöst hat , weshalb der Befehl einen Rückruf akzeptiert. Nach dem Aufruf der end () -Methode benötigt der Stream Zeit, um die Daten auf das zugrunde liegende System zu übertragen. Wenn Sie read () aufrufen, bevor das Finish-Ereignis ausgelöst wird, schlägt dies fehl. Geben Sie Gwerders Code in JSbin ein und überzeugen Sie sich selbst. Sie sollten die Streams- Dokumentation lesen, um zu verstehen, wie es funktioniert.read()
wenn die beschreibbare Seite endet, und es gibt nichts über das Ende des Ereignisses.