gpt4 book ai didi

javascript - Crypto.randomBytes 处理异常对熵不足有何影响?

转载 作者:数据小太阳 更新时间:2023-10-29 04:49:40 25 4
gpt4 key购买 nike

在此方法的文档中,它声明如果没有足够的熵来生成数据,它将抛出异常。我的问题与熵有关。它是如何生成的,您能否通过提供足够的熵来防止抛出异常?抛出异常的频率有多高,还是未知?

crypto.randomBytes 的文档:

crypto.randomBytes(size, [callback])

// async
crypto.randomBytes(256, function(ex, buf) {
if (ex) throw ex;
console.log('Have %d bytes of random data: %s', buf.length, buf);
});

Generates cryptographically strong pseudo-random data.

Will throw error or invoke callback with error, if there is not enough accumulated entropy to generate cryptographically strong data. In other words, crypto.randomBytes without callback will not block even if all entropy sources are drained.

在下面的示例中,我将如何正确处理异常并仍然完全填充数组,基本上确保数组已被生成的字节完全填充。我会不会只捕获异常并在 catch block 中生成一个新数组,但如果这也会引发异常呢?从本质上讲,我如何才能使此代码在 100% 的时间内正常工作?

var codes = [];
for(var i = 0;i < 100;i++){
(function(i){
crypto.randomBytes(256, function(ex, buf) {
if (ex) throw ex;
codes[i] = buf.toString('hex');
});
})(i)
}

最佳答案

如果没有可用的熵,最好的办法是稍等片刻,然后重试。您需要等待多长时间取决于您需要多少熵以及底层熵源的工作方式。

在实践中,我怀疑你会遇到任何问题。我不知道 Node.js 在幕后做了什么,其他库中的等效函数通常是作为对操作系统的熵池的调用来实现的——例如/dev/urandomCryptGenRandom() - 或者作为从操作系统的熵池播种的 CSPRNG。无论哪种情况,您都不会阻塞。

只有在 Linux 上从 /dev/random 读取时,阻塞才会成为问题。这是因为 /dev/random 在 Linux 上可能会阻塞,但在其他平台上不会。如果您直接从硬件 RNG 读取数据,这也可能是个问题。

关于javascript - Crypto.randomBytes 处理异常对熵不足有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24582325/

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