nodejs node example crypto createcipheriv javascript node.js algorithm hash node-crypto

javascript - example - pbkdf2 node



¿Cómo uso Node.js Crypto para crear un hash HMAC-SHA1? (3)

Documentación para crypto: http://nodejs.org/api/crypto.html

var crypto = require(''crypto'') , text = ''I love cupcakes'' , key = ''abcdeg'' , hash hash = crypto.createHmac(''sha1'', key).update(text).digest(''hex'')

Quiero crear un hash de I love cupcakes (firmado con la clave abcdeg )

¿Cómo puedo crear ese hash, usando Node.js Crypto?


Hace algunos años se dijo que update() y digest() eran métodos heredados y se introdujo el nuevo enfoque de API de transmisión. Ahora los documentos dicen que se puede usar cualquiera de los métodos. Por ejemplo:

var crypto = require(''crypto''); var text = ''I love cupcakes''; var secret = ''abcdeg''; //make this your secret!! var algorithm = ''sha1''; //consider using sha256 var hash, hmac; // Method 1 - Writing to a stream hmac = crypto.createHmac(algorithm, secret); hmac.write(text); // write in to the stream hmac.end(); // can''t read from the stream until you call end() hash = hmac.read().toString(''hex''); // read out hmac digest console.log("Method 1: ", hash); // Method 2 - Using update and digest: hmac = crypto.createHmac(algorithm, secret); hmac.update(text); hash = hmac.digest(''hex''); console.log("Method 2: ", hash);

Probado en el nodo v6.2.2 y v7.7.2

Ver https://nodejs.org/api/crypto.html#crypto_class_hmac . Da más ejemplos para usar el enfoque de transmisión.


La solución de Gwerder no funcionará porque hash = hmac.read(); sucede antes de que la transmisión termine. Por lo tanto, los problemas de AngraX. Además, la declaración hmac.write no es necesaria en este ejemplo.

En lugar de hacer esto:

var crypto = require(''crypto''); var hmac; var algorithm = ''sha1''; var key = ''abcdeg''; var text = ''I love cupcakes''; var hash; hmac = crypto.createHmac(algorithm, key); // readout format: hmac.setEncoding(''hex''); //or also commonly: hmac.setEncoding(''base64''); // callback is attached as listener to stream''s finish event: hmac.end(text, function () { hash = hmac.read(); //...do something with the hash... });

Más formalmente, si lo desea, la línea

hmac.end(text, function () {

podría escribirse

hmac.end(text, ''utf8'', function () {

porque en este ejemplo el texto es una cadena utf