javascript - 有没有比 crypto.randomBytes 更好的方法来生成性能方面的唯一 ID?
问题描述
Node.js 文档强烈反对使用crypto.randomBytes()
. 然而,正如我在 StackOverflow 的答案中所读到的,在所有随机字符串生成方法中,例如使用时间戳等,实现最高熵的最佳方法是crypto.randomBytes()
.
我想使用这个 uuid 策略在我的 node.js 系统中生成验证密钥。在性能方面还有其他更好的方法吗?
解决方案
如果你想使用 CSPRNG,不是真的。
建议使用uuid
,但它只是调用crypto.randomBytes(16)
并将其转换为十六进制字符串。randomBytes
阻塞并不是真正的问题,因为它也提供异步 api(第二个参数是回调)。在生成如此少量的数据时,使用同步 api 可能会更快。
文档仍然提到缺乏熵可能导致比平时更长的块。不过,这应该只是在启动后才出现的问题,即使在这种情况下,也可以通过使用异步 api 来避免阻塞。
在有足够的可用熵之前,crypto.randomBytes() 方法不会完成。这通常不会花费超过几毫秒的时间。可以想象,生成随机字节的唯一时间可能会阻塞更长的时间是在启动之后,此时整个系统的熵仍然很低。
推荐阅读
- jenkins-pipeline - 多个下游阶段到一组并行阶段
- r - 如何从向量中采样而不重复?
- powershell - 如何从 Powershell 中的值中提取非常特定的字符串?
- javascript - 在 Promise 解决后,Remove 实际上会删除一个 div
- c# - Visual Studio 2019 ASP.NET Core API 项目模板损坏?
- c# - 在 View MVC 中显示子数据
- c++ - 错误:限定符在类型“blah blah”的绑定引用中被删除以初始化“some other blah blah”
- c - 在 C 中更有效地编程正弦和余弦
- javascript - Node v.8.1.3上sort()方法操作不正确?
- ios - 在 iOS 13 中,当用户在应用切换器中向上滑动我的应用时,我会收到哪些事件?