2014-01-19 51 views
4

今天的網頁瀏覽器(Chrome,IE,Safari & Firefox)的狀態和它們創建加密強UUID的能力是什麼?在研究這個問題時,我一直無法找到任何明確的。我遇到過有關stackoverflow和其他地方的信息,指出Math.random的問題,但我想知道所有這些的當前狀態。在Javascript中可以生成加密性較強的UUID嗎?

UPDATE

由於icktoofay指出,crypto.getRandomValues是做到這一點的方式。不幸的是,跨瀏覽器的支持是有限的。有沒有一種經過驗證的方法來解決這個問題?有沒有解決這個問題的JavaScript庫?

+5

「密碼強UUID」是什麼意思? UUID不應該是加密的任何東西 - 它們意味着獨一無二。 – 2014-01-19 04:03:46

+0

我指的是隨機數發生器的質量。它有足夠的熵,它是加密等級嗎? – user1843640

+0

在UUID的背景下,不需要隨機性,只需要唯一性。這兩個不是同義詞。 – 2014-01-19 08:45:39

回答

4

在擁有它的瀏覽器中,可以使用crypto.getRandomValues來獲得加密安全的僞隨機值。例如:

var array = new Uint8Array(16); 
crypto.getRandomValues(array); 

然後,您可以操縱這些字節到一個有效的UUID。

+0

如果這不夠強大,你可以隨時撥打多個電話...... – Floris

+0

感謝您的鏈接。有了crypto.getRandomValues的支持,還有其他方法可以獲得更強的隨機性嗎?我會更新這個問題。 – user1843640

+0

@ user1843640:'crypto.getRandomValues'是你得到的最好的選擇,但如果沒有,你可能想看看[SJCL怎麼做](https://github.com/bitwiseshiftleft/sjcl/blob /master/core/random.js)。 – icktoofay

1

雖然這並不直接回答原來的問題,但它可能有助於找尋圖書館的人來幫助創建UUID。對於我目前的需求,我決定使用node-uuid庫。從功能列表:

  • 生成RFC4122版本1或版本4點的UUID
  • 強加密隨機#代上支撐平臺

看着似乎通過加密來完成這個源.getRandomValues這是@icktoofay建議的。