javascript – Crypto.randomBytes处理异常会导致熵不足吗?

前端之家收集整理的这篇文章主要介绍了javascript – Crypto.randomBytes处理异常会导致熵不足吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在该方法的文档中,它声明如果生成数据的熵量不足,它将抛出异常.我的问题与熵有关.如何生成并且可以通过提供足够的熵来防止异常被抛出?抛出异常会有多常见,还是未知?

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块中生成一个新数组,但是如果它也会引发异常?基本上我将如何使这段代码100%正常工作?

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

解决方法

如果没有可用的熵,你最好的选择是等一下再试一次.您需要等待多长时间取决于您需要多少熵以及基础熵源如何工作.

在实践中,我怀疑你会有任何问题.我不知道Node.js在幕后做了什么,其他库中的等效函数通常被实现为对OS的熵池的调用 – 例如/ dev / urandom或CryptGenRandom() – 或者作为从OS的熵池中播种的CSPRNG.在任何一种情况下,你永远不会阻止.

如果你在Linux上读取/ dev / random,阻塞只是一个问题.这是因为/ dev / random可能在Linux上阻塞,但在其他平台上不会阻止.如果您直接从硬件RNG读取,也可能是一个问题.

猜你在找的JavaScript相关文章