我建设,需要我生成自定义会话和随机密码等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