c# – static RNGCryptoServiceProvider – 生成会话和随机密码是否安全且线程安全?

我正在构建一个Web服务,需要我生成自定义会话和随机密码等.

我想知道是否制作静态类并为整个网站使用1个静态RNGCryptoServiceProvider实例是个好主意?
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)如果它是加密安全的,它应该是,那么这种猜测应该是不可行的.

2)在旁注中,我建议在静态属性annd中删除JIT实例化,而不是执行以下操作:

protected static readonly RandomNumberGenerator _rng = new RNGCryptoServiceProvider();

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...