gpt4 book ai didi

Node.js:是否使用 Crypto 模块完全异步创建 MD5 哈希?

转载 作者:行者123 更新时间:2023-12-01 21:38:49 25 4
gpt4 key购买 nike

在 Node 11 环境中考虑这段代码并使用标准加密模块,我有两个问题(并且只是为了避免任何误解:我只是根据字符串计算 MD5 哈希 - 没有加密,没有敏感数据):

exports.calculateSomeHash = function(somestring, cb){
var somehash = crypto.createHash('md5').update(somestring).digest('hex').toString();
cb(null, somehash);
};

1) calculateSomeHash() 是否会返回一个空值(somehash),因为一旦触发回调,哈希计算可能还没有完全完成?

2) Node 的加密模块的哈希算法是完全异步和非阻塞的吗?如果没有,关于替代使用什么的任何建议?那例如呢Hasha

最佳答案

所有这些方法都是阻塞和同步的:

crypto.createHash()
hash.update()
hash.digest()
.toString()

因此,您的结果将是完全同步的。您根本不必使用回调来传达结果。直接返回结果即可:

exports.calculateSomeHash = function(somestring){
return crypto.createHash('md5').update(somestring).digest('hex').toString();
};

仅供引用,加密库确实有一些异步方法,但这些不是异步方法。

Could calculateSomeHash() ever return an empty (somehash) value as the hash calculation may perhaps not be fully completed as soon as the callback is fired?

没有。它们是同步的。他们没有与时间相关的问题。

Is this hashing algorithm of Node's crypto module fully asynchronous and non-blocking?

没有。这是同步和阻塞的。这对您是否重要可能取决于数据的大小。

内置的加密模块似乎没有内置到 node.js 中的异步哈希选项。因为散列纯粹是 CPU 工作,所以使它们成为非阻塞和异步的唯一方法是在 native 代码中使用 native 线程,使用 WorkerThread 或使用 child_process。所有这些选项都会产生通常不需要的额外开销。但是,如果这对您来说确实是个问题,您可以启动一个 WorkerThread,然后向它发送一个您想要其哈希值的字符串,它可以向您发送消息返回哈希值。

你可以看看 bcrypt module它具有一些异步哈希,但功能并不完全相同,因此您必须看看它是否符合您的需求。

关于Node.js:是否使用 Crypto 模块完全异步创建 MD5 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61601457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com