【问题标题】:Is there a better way than crypto.randomBytes to generate unique ids in performance-wise?有没有比 crypto.randomBytes 更好的方法来生成性能方面的唯一 ID?
【发布时间】:2019-08-15 01:04:14
【问题描述】:

Node.js 文档强烈反对使用crypto.randomBytes()。然而,正如我在 StackOverflow 的回答中读到的,在所有随机字符串生成方法中,例如使用时间戳等,实现最高熵的最佳方法是 crypto.randomBytes()

我想使用这个 uuid 策略在我的 node.js 系统中生成验证密钥。在性能方面还有其他更好的方法吗?

【问题讨论】:

  • 性能明智?它在 CPU 上总是很昂贵的 afaik
  • 为什么您的唯一 ID 需要高熵?从高熵源中播种随机生成器还不够吗?
  • 文档在哪里强烈反对使用它?
  • @FINDarkside 我记得这是不鼓励的,因为当没有足够的熵时 randomBytes 会阻塞 I/O。这就是为什么在另一个页面上他们说它是/应该由工作线程运行,我不记得是哪个。带有声明的文档页面非常旧,所以他们最近可能更改了它。

标签: javascript node.js


【解决方案1】:

如果你想使用 CSPRNG,不是真的。

建议使用uuid,但它只是调用crypto.randomBytes(16) 并将其转换为十六进制字符串。 randomBytes 阻塞并不是真正的问题,因为它也提供异步 api(第二个参数是回调)。在生成如此少量的数据时,使用同步 api 可能会更快。

Docs do still mention 缺乏熵可能导致比平时更长的块。不过,这应该只是在启动后才会出现问题,即使在这种情况下,也可以通过使用异步 api 来避免阻塞。

在有足够的可用熵之前,crypto.randomBytes() 方法不会完成。这通常不会花费超过几毫秒的时间。可以想象,生成随机字节可能会阻塞较长时间的唯一时间是在启动后,整个系统的熵仍然很低。

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2011-12-20
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多