以下示例代码中的每个方法链接调用都有什么作用?:
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的结果进行编码
但是不是这样,因为在命令行上执行这些操作会产生不同的结果。
有人可以帮忙吗?
答案 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=
crypto.createHmac('sha256',秘密)-自我解释会初始化一个加密hmac对象。
.update('我爱纸杯蛋糕')-第二个缺少的参数是您要传入的要进行哈希处理的数据的编码,因为它被忽略了,因此被迫使用utf-8字符串,您可以传入缓冲区并指定编码,或者传入类型化数组并指定编码等。可以多次调用update方法,以将其他字符串,缓冲区等添加到以这种方式传递的数据的末尾。接收大块数据,您可以在它们到达时传递它们。
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 >