我建設,需要我生成自定義會話和隨機密碼等static RNGCryptoServiceProvider - 生成會話和隨機密碼的安全性和線程安全性?
我在想,如果做一個靜態類和使用1個靜態RNGCryptoServiceProvider實例整個網站是一個好主意,web服務? 1.它是來自多個http請求實例的線程安全嗎? 2.安全嗎?如果我允許某人在很短的時間內生成很多會話,是否可以計算出RNG的狀態並預測下一次會話?
在我的服務中,其他用戶知道什麼時候有人登錄,並且我最初在創建會話時創建了一個新的RNGCryptoServiceProvider,但是我擔心的是,如果這是基於當前日期時間,理論上只能有人要經過幾千次會話才能「猜測」另一個用戶的會話,如果他們大概知道他們第二次登錄的話。
public static class random
{
private static RandomNumberGenerator _rng;
protected static RandomNumberGenerator rng
{
get
{
if (_rng == null) _rng = new RNGCryptoServiceProvider();
return _rng;
}
}
public static byte[] Bytes(int number)
{
var value = new byte[number];
rng.GetBytes(value);
return value;
}
public static byte Byte { get { return Bytes(1)[0]; } }
public static int Int { get { return BitConverter.ToInt32(Bytes(4), 0); } }
public static long Long { get { return BitConverter.ToInt64(Bytes(8), 0); } }
}
+1瞭解重要細節。 – 2009-08-11 11:27:33
從.NET 3.5開始,'RNGCryptoServiceProvider'類是線程安全的:請參閱https://msdn.microsoft.com/en-us/library/5f45t420%28v=vs.90%29.aspx(但不在Silverlight中)。 – 2015-12-01 20:13:28