如何使用Node.js Crypto创建HMAC-SHA1哈希?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Node.js Crypto创建HMAC-SHA1哈希?相关的知识,希望对你有一定的参考价值。

我想创建一个I love cupcakes的哈希(用密钥abcdeg签名)

如何使用Node.js加密创建该哈希?

答案

加密文档: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()是遗留方法,并引入了新的流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上测试

https://nodejs.org/api/crypto.html#crypto_class_hmac。给出了使用流式方法的更多示例。

另一答案

Gwerder的解决方案无法工作,因为hash = hmac.read();发生在流完成之前。因此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是一个utf字符串

以上是关于如何使用Node.js Crypto创建HMAC-SHA1哈希?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 加密与 Google Apps 脚本 (GAS) 中的 HMAC

node.js密码加密实践

Node.js v0.10.31API手冊-加密

Node.js v0.10.31API手冊-加密

React-Native + crypto:如何在 React-Native 中生成 HMAC?

将crypto hmac转换为crypto-js hmac字符串