节点加密HMAC返回<slowbuffer>而不是String </slowbuffer>

时间:2014-05-14 15:45:04

标签: node.js cryptography buffer md5 hmac

我使用标准节点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')也是如此。

1 个答案:

答案 0 :(得分:1)

在仔细阅读crypto docs后,似乎实际上是预期的:

  

如果未提供编码,则返回缓冲区。

由于digest()方法已被弃用,而不是read(),我跳过了这个方法并假设如果没有指定则会使用默认编码。

解决方案只是hmac.setEncoding('hex')