[英]correct way to exclude certain characters from crypto.randomBytes
[英]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);
但是不建議這樣做。
如果要使用CSPRNG,則不可以。
建議使用uuid
,但它只是調用crypto.randomBytes(16)
並將其轉換為十六進制字符串。 randomBytes
阻塞並不是真正的問題,因為它還提供了異步api(第二個arg是回調)。 但是,當生成如此少量的數據時,使用sync api可能會更快。
Docs 仍然提到缺乏熵可能導致比通常更長的阻塞。 盡管這只是啟動后的一個問題,即使在那種情況下,也可以通過使用異步api來避免阻塞。
在沒有足夠的熵可用之前,crypto.randomBytes()方法將不會完成。 通常,這應該不會花費超過幾毫秒的時間。 可以想象,當整個系統的熵仍然很低時,生成隨機字節的唯一時間可能是在引導后立即阻塞更長的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.