nodejs加密方法链如何工作?

时间:2018-11-14 21:55:11

标签: javascript node.js cryptography hmac

以下示例代码中的每个方法链接调用都有什么作用?:

var crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
       .update('I love cupcakes')
       .digest('base64');
console.log(hash);

// Prints:
// wPobwAUxvXjvOMYoRJxRAq6r1Jtdw6KlFupuqVnWZY4=

我正在尝试在Swift中做类似的事情,但无法获得最终的哈希值。

我认为它是在做以下事情:

1)crypto.createHmac('sha256',secret)//初始化加密对象

2).update('我爱纸杯蛋糕')// sha256使用秘钥哈希'我爱纸杯蛋糕'

3)摘要('base64')// base 64对2的结果进行编码

但是不是这样,因为在命令行上执行这些操作会产生不同的结果。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

var crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
   .update('I love cupcakes')
   .digest('base64');
console.log(hash);

// Prints:
// wPobwAUxvXjvOMYoRJxRAq6r1Jtdw6KlFupuqVnWZY4=
  1. crypto.createHmac('sha256',秘密)-自我解释会初始化一个加密hmac对象。

  2. .update('我爱纸杯蛋糕')-第二个缺少的参数是您要传入的要进行哈希处理的数据的编码,因为它被忽略了,因此被迫使用utf-8字符串,您可以传入缓冲区并指定编码,或者传入类型化数组并指定编码等。可以多次调用update方法,以将其他字符串,缓冲区等添加到以这种方式传递的数据的末尾。接收大块数据,您可以在它们到达时传递它们。

  3. digest('base64')-这是您摘要消化后的最后一次调用,本质上是说我已完成将数据添加到此哈希并以base64格式计算结果,还可以将其他格式传递给返回哈希。要记住的重要一点是,一旦调用摘要,哈希就完成了,无法再添加任何数据,并且即使使用相同的参数,也需要创建一个新的hmac变量来创建另一个hmac。

例如。

const crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret);
hash.update('I ', 'utf8');
hash.update('love ', 'utf8');
hash.update('cupcakes', 'utf8');
hash.digest('base64');
console.log(hash);

这应该返回相同的值。如果您使用的是Windows cmd.exe,我认为Windows使用的编码不同于utf8,则必须进行检查,或者创建一个传入参数和哈希值的node js文件,然后登录控制台,而不是使用REPL