首页 > 解决方案 > 有没有比 crypto.randomBytes 更好的方法来生成性能方面的唯一 ID?

问题描述

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

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

标签: javascriptnode.js

解决方案


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

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

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

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


推荐阅读