使用.NET Core生成哈希

时间:2016-10-28 16:50:35

标签: security random hash .net-core

我需要生成随机唯一哈希,以便在.Net Core中的密码重置链接中使用。在ASP.NET身份中,我发现这有用,我想知道 RNGCryptoServiceProvider 是否仍能确保生成的哈希的随机性。

 using (RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider())
            {
                var data = new byte[4];
                for (int i = 0; i < 10; i++)
                {
                    //filled with an array of random numbers
                    rngCsp.GetBytes(data);
                    //this is converted into a character from A to Z
                    var randomchar = Convert.ToChar(
                        //produce a random number 
                        //between 0 and 25
                        BitConverter.ToUInt32(data, 0) % 26
                        //Convert.ToInt32('A')==65
                                              + 65
                    );
                    token.Append(randomchar);
                }
            }

使用.net核心并使用哪些类来实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:9)

RNGCryptoServiceProvider不在.NET Core中。使用RandomNumberGenerator.Create()获取可在正确平台上运行的CSPRNG实例。它的API与RNGCryptoServiceProvider相同,只是缺少GetNonZeroBytes(我认为它不应该存在)。

在Windows上,这将归结为CNG中的BCryptGenRandom,而在Linux上它将使用OpenSSL。