Mic*_*ael 7 javascript cryptography node.js
在该方法的文档中,它声明如果生成数据的熵量不足,它将抛出异常.我的问题与熵有关.如何生成并且可以通过提供足够的熵来防止异常被抛出?抛出异常会有多常见,还是未知?
文档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);
});
Run Code Online (Sandbox Code Playgroud)
生成加密强大的伪随机数据.
如果没有足够的累积熵来生成加密强数据,则会抛出错误或调用带有错误的回调.换句话说,即使所有熵源都耗尽,没有回调的crypto.randomBytes也不会阻塞.
在下面的示例中,我将如何正确处理异常并仍然完全填充数组,基本上确保数组已完全填充生成的字节.我是否只是捕获异常并在catch块中生成一个新数组,但是如果它也会引发异常?基本上我将如何使这段代码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)
}
Run Code Online (Sandbox Code Playgroud)
如果没有可用的熵,最好的选择是稍等一下然后重试。您需要等待多长时间取决于您需要多少熵以及底层熵源的工作原理。
在实践中,我怀疑你不会遇到任何问题。我不知道 Node.js 在幕后做了什么,其他库中的等效函数通常作为对操作系统熵池的调用来实现 - 例如/dev/urandomor CryptGenRandom()- 或者作为从操作系统熵池中播种的 CSPRNG。无论哪种情况,你都不会阻塞。
仅当您在 Linux 上阅读时,阻塞才成为问题/dev/random。这是因为/dev/random在 Linux 上可能会阻塞,但在其他平台上不会。如果您直接从硬件 RNG 读取,这也可能是一个问题。
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |