2009-11-03 27 views

回答

85
using System.Security.Cryptography; 
... 
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider()) 
{ 
    byte[] tokenData = new byte[32]; 
    rng.GetBytes(tokenData); 

    string token = Convert.ToBase64String(tokenData); 
} 
+28

對WinAPI GUID生成器的密碼分析表明,由於V4 GUID的序列是僞隨機的,給定初始狀態,可以預測到函數UuidCreate返回的下一個250 000個GUID。這就是爲什麼GUID不應用於密碼學,例如,作爲隨機密鑰。 (來自http://en.wikipedia.org/wiki/Globally_Unique_Identifier) – configurator 2009-11-03 16:36:47

+1

這不是專門的密碼術,tho。而且,很難預測機器的初始狀態。 – 2009-11-03 17:07:19

+10

常見的攻擊是對服務器進行DDoS攻擊,直到它重新啓動。然後預測初始狀態(系統時鐘)要容易得多。 – LaJmOn 2012-02-15 16:01:01

3

這取決於你的意思是什麼快...

沒有真正快速安全的隨機數發生器。如果你想快點,你應該使用常規的隨機類。如果你想要安全,你應該使用Cryptography命名空間中的隨機生成器,但這要慢得多。你根本無法擁有兩者。

+1

如果您願意與本地加密實現進行互操作,您可以獲得優異的性能(比System.Random快幾倍)和安全性。 – CodesInChaos 2014-11-22 13:59:39

+9

@CodesInChaos:所以;快速,安全,簡單 - 選擇任何兩個。 :) – Guffa 2014-11-22 14:24:32