我正在使用标准节点crypto
库来生成HMAC MD5哈希。
当我尝试读取哈希值时,返回的对象是<SlowBuffer>
而不是预期的String
。
下面是一个简化的示例,但给出的结果相同:
var crypto = require('crypto');
var hmac = crypto.createHmac('md5', 'KEY');
hmac.write('something');
hmac.end();
var hash = hmac.read();
console.log(hash);
//Outputs: <SlowBuffer 4c ec c5 6e 46 90 23 7a f1 2e 5a 78 35 21 6a 7a>
是什么导致哈希类型被强制转换为
SlowBuffer
类型?如何避免这种强制性,或者至少要从缓冲区中读取原始值?如果我通过
hmac.setEncoding()
设置哈希的编码值,它将简单地将值<SlowBuffer 4c ec c5 6e 46 90 23 7a f1 2e 5a 78 35 21 6a 7a>
编码为给定格式的字符串。我尝试在缓冲区本身上调用toString('encoding')
的情况也是如此。 最佳答案
在更仔细地阅读了crypto docs之后,看来这实际上是可以预期的:
如果未提供编码,则返回缓冲区。
由于不建议使用digest()
方法,而推荐使用read()
,因此我跳过了该方法,并假设如果未指定,则将使用默认编码。
解决方案只是hmac.setEncoding('hex')
。
关于node.js - Node 加密HMAC返回<SlowBuffer>而不是String,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23659348/