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