C# ASP.NET会话id:是否可靠?

C# ASP.NET会话id:是否可靠?,c#,asp.net,security,C#,Asp.net,Security,根据该帖子: 当您将鼠标悬停在VS中ASP.NET应用程序中的SessionId上时,会显示Unique SessionId。我不知道当算法不支持唯一id时,他们如何保证唯一id。代码如下: internal static string Create(ref RandomNumberGenerator randgen) { if (randgen == null) { randgen = new RNGCryptoServi

根据该帖子:

当您将鼠标悬停在VS中ASP.NET应用程序中的SessionId上时,会显示Unique SessionId。我不知道当算法不支持唯一id时,他们如何保证唯一id。代码如下:

    internal static string Create(ref RandomNumberGenerator randgen)
    {
        if (randgen == null)
        {
            randgen = new RNGCryptoServiceProvider();
        }
        byte[] data = new byte[15];
        randgen.GetBytes(data);
        return Encode(data);
    }
    private static string Encode(byte[] buffer)
    {
        char[] chArray = new char[0x18];
        int num2 = 0;
        for (int i = 0; i < 15; i += 5)
        {
            int num4 = ((buffer[i] | (buffer[i + 1] << 8)) | (buffer[i + 2] << 0x10)) | (buffer[i + 3] << 0x18);
            int index = num4 & 0x1f;
            chArray[num2++] = s_encoding[index];
            index = (num4 >> 5) & 0x1f;
            chArray[num2++] = s_encoding[index];
            index = (num4 >> 10) & 0x1f;
            chArray[num2++] = s_encoding[index];
            index = (num4 >> 15) & 0x1f;
            chArray[num2++] = s_encoding[index];
            index = (num4 >> 20) & 0x1f;
            chArray[num2++] = s_encoding[index];
            index = (num4 >> 0x19) & 0x1f;
            chArray[num2++] = s_encoding[index];
            num4 = ((num4 >> 30) & 3) | (buffer[i + 4] << 2);
            index = num4 & 0x1f;
            chArray[num2++] = s_encoding[index];
            index = (num4 >> 5) & 0x1f;
            chArray[num2++] = s_encoding[index];
        }
        return new string(chArray);
    }
内部静态字符串创建(参考RandomNumberGenerator randgen)
{
if(randgen==null)
{
randgen=新的RNGCryptoServiceProvider();
}
字节[]数据=新字节[15];
randgen.GetBytes(数据);
返回编码(数据);
}
专用静态字符串编码(字节[]缓冲区)
{
char[]chArray=新字符[0x18];
int num2=0;
对于(int i=0;i<15;i+=5)
{
int num4=((缓冲区[i]|(缓冲区[i+1]>10)和0x1f;
chArray[num2++]=s_编码[索引];
索引=(num4>>15)和0x1f;
chArray[num2++]=s_编码[索引];
索引=(num4>>20)和0x1f;
chArray[num2++]=s_编码[索引];
索引=(num4>>0x19)和0x1f;
chArray[num2++]=s_编码[索引];
num4=((num4>>30)和3)|(缓冲区[i+4]>5)和0x1f;
chArray[num2++]=s_编码[索引];
}
返回新字符串(chArray);
}

您刚刚完整地复制了一篇博客文章的文本。请阅读并分享您的研究,详细说明您的问题。关于random、unique和GUID,已经有很多文章,您发现了什么?从提供的代码中可以看出,会话id基本上是(加密的)随机15字节(120位)的数字,因此它不是真正的“唯一”但是冲突(生成重复的会话id)的几率很低,对于这个用例(会话id)可以忽略。这就接近了重复的GUID问题。你不会有问题的。@Henk在链接/复制的博客中写道:“这会导致生成非唯一GUID和SessionId的问题[…]我在ASP.NET和java中看到了这一点。”。[需要引用]。他(博客海报)看到ASP.Net和Java中的rng代码并设想了这个问题。您刚刚完整地复制了一篇博客文章的文本。请阅读并分享您的研究,详细说明您的问题。关于random、unique和Guid已经写了很多,您发现了什么?从提供的代码中可以看出会话id基本上是(加密的)随机的15字节(120位)的数字,所以它不是真正的“唯一”,但冲突(生成重复的会话id)的可能性很低,对于这个用例(会话id)可以忽略。这就接近了重复的GUID问题。你不会有问题。@Henk来自链接/复制的博客:“这会导致生成非唯一GUID和SessionId的问题[…]我在ASP.NET和java中看到过这一点”。[需要引用]。他(博客海报)看到了ASP.NET和java中的rng代码,并想象了这个问题。