Igo*_* P. 1 cryptography asynchronous node.js
考虑到 Node 11 环境中的这段代码并使用标准加密模块,我有两个问题(为了避免任何误解:我只是根据字符串计算 MD5 哈希值 - 没有加密,没有敏感数据):
exports.calculateSomeHash = function(somestring, cb){
var somehash = crypto.createHash('md5').update(somestring).digest('hex').toString();
cb(null, somehash);
};
Run Code Online (Sandbox Code Playgroud)
1)calculateSomeHash() 是否可以返回一个空的(somehash)值,因为一旦回调被触发,哈希计算可能不会完全完成?
2)Node的crypto模块的这个散列算法是完全异步和非阻塞的吗?如果没有,关于替代使用什么的任何建议?比如哈希呢?
所有这些方法都是阻塞和同步的:
crypto.createHash()
hash.update()
hash.digest()
.toString()
Run Code Online (Sandbox Code Playgroud)
因此,您的结果将完全同步。您根本不必使用回调来传达结果。您可以直接返回结果:
exports.calculateSomeHash = function(somestring){
return crypto.createHash('md5').update(somestring).digest('hex').toString();
};
Run Code Online (Sandbox Code Playgroud)
仅供参考,加密库确实有一些异步方法,但这些不是异步方法。
calculateSomeHash() 是否可以返回一个空的(somehash)值,因为一旦回调被触发,哈希计算可能不会完全完成?
不,它们是同步的。他们没有与时间相关的问题。
Node 的加密模块的这种散列算法是完全异步和非阻塞的吗?
不。这是同步和阻塞的。这对您是否重要可能取决于数据的大小。
内置的加密模块似乎没有内置到 node.js 中的异步哈希选项。因为散列纯粹是 CPU 工作,使它们非阻塞和异步的唯一方法是在本机代码中使用本机线程、使用 WorkerThread 或使用 child_process。所有这些选项都会产生通常不需要的额外开销。但是,如果这对你来说真的是个问题,你可以启动一个 WorkerThread,然后向它发送一个你想要散列的字符串,它可以向你发送回散列值。
您可以查看具有一些异步散列的bcrypt 模块,但它的功能并不完全相同,因此您必须查看它是否符合您的需求。
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |