如何使用node.js Crypto创buildHMAC-SHA1哈希?

我想创build一个“ I love cupcakes ”(用“abcdeg”键签名)

我怎样才能使用Node.js Crypto创build哈希?

encryption文件: 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') 

几年前,有人说, update()digest()是传统的方法,并引入了新的stream式API方法。 现在文档说任何一种方法都可以使用。 例如:

 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); 

在节点v6.2.2和v7.7.2上testing

请参阅https://nodejs.org/api/crypto.html#crypto_class_hmac 。 给出更多使用stream方法的例子。

Gwerder的解决scheme不会工作,因为hash = hmac.read(); 在stream完成之前发生。 因此AngraX的问题。 在这个例子中, hmac.write语句也是不必要的。

而是这样做:

 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... }); 

更正式的,如果你愿意的话

 hmac.end(text, function () { 

可以写

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

因为在这个例子中,text是一个utfstring

 var password = crypto.createHash('sha1').update(text).digest("hex");