如何使用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");