簡體   English   中英

有沒有比 crypto.randomBytes 更好的方法來在性能方面生成唯一的 id?

[英]Is there a better way than crypto.randomBytes to generate unique ids in performance-wise?

Node.js 文檔強烈反對使用crypto.randomBytes() 然而,正如我在 StackOverflow 的答案中讀到的那樣,在所有隨機字符串生成方法中,例如使用時間戳等。實現最高熵的最佳方法是crypto.randomBytes()

我想使用這個 uuid 策略在我的 node.js 系統中生成驗證密鑰。 在性能方面還有其他更好的方法嗎?

您可以使用npm軟件包uuid

例:

const uuidv4 = require('uuid/v4');
uuidv4(); // ⇨ '0b3e4d7a-1c48-4fb7-ba10-e054f99aacfb'

因為生成隨機字符串在CPU上總是很昂貴的任務,但是guid比crypto.randomBytes()更好。

或者您可以使用以下內容生成它

 Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);

但是不建議這樣做。

有關更多詳細信息,請遵循joepie91的 令人敬畏的要旨

如果要使用CSPRNG,則不可以。

建議使用uuid ,但它只是調用crypto.randomBytes(16)並將其轉換為十六進制字符串。 randomBytes阻塞並不是真正的問題,因為它還提供了異步api(第二個arg是回調)。 但是,當生成如此少量的數據時,使用sync api可能會更快。

Docs 仍然提到缺乏熵可能導致比通常更長的阻塞。 盡管這只是啟動后的一個問題,即使在那種情況下,也可以通過使用異步api來避免阻塞。

在沒有足夠的熵可用之前,crypto.randomBytes()方法將不會完成。 通常,這應該不會花費超過幾毫秒的時間。 可以想象,當整個系統的熵仍然很低時,生成隨機字節的唯一時間可能是在引導后立即阻塞更長的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM