我正在使用标准节点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/

10-11 00:11