模块创建MD5哈希是完全异步的吗?"/>
Node.js:使用加密模块创建MD5哈希是完全异步的吗?
考虑到在Node 11环境中使用这段代码并使用标准的加密模块,我有两个问题(为了避免任何误解:我只是基于字符串来计算MD5哈希-不加密,不敏感数据) :
exports.calculateSomeHash = function(somestring, cb){
var somehash = crypto.createHash('md5').update(somestring).digest('hex').toString();
cb(null, somehash);
};
1)可能会在回调被触发后立即无法完全完成hashSomeHash()返回空(somehash)值的情况?
2)Node的加密模块的这种哈希算法是否完全异步且无阻塞?如果没有,关于使用什么替代方法的任何建议?例如Hasha呢?
回答如下:所有这些方法都是阻塞和同步的:
crypto.createHash()
hash.update()
hash.digest()
.toString()
因此,您的结果将完全同步。您根本不需要使用回调来传达结果。您可以直接返回结果:
exports.calculateSomeHash = function(somestring){
return crypto.createHash('md5').update(somestring).digest('hex').toString();
};
FYI,加密库确实有一些异步方法,但是这些不是异步方法。
[calculateSomeHash()是否会返回空(somehash)值,因为一旦触发回调,哈希计算可能就不会完全完成?
没有它们是同步的。没有与时间相关的问题。
Node的加密模块的此哈希算法是否完全异步且无阻塞?
没有这是同步且阻塞的。这对您来说是否重要,可能取决于数据的大小。
内置加密模块似乎没有在node.js中内置异步哈希选项。因为哈希纯粹是CPU的工作,所以使它们无阻塞和异步的唯一方法是在本机代码中使用本机线程,使用WorkerThread或使用child_process。所有这些选项都会产生额外的开销,这些开销通常可能不是必需的。但是,如果这确实对您来说是个问题,则可以启动一个WorkerThread,然后向其发送一个您希望对其进行哈希处理的字符串,并可以向您发送回哈希值的消息。
更多推荐
Node.js:使用加密模块创建MD5哈希是完全异步的吗?
发布评论