使用.NET Core生成哈希值

5

我需要在.Net Core中生成随机唯一哈希,用于密码重置链接。在ASP.NET Identity中,我发现以下代码很有帮助,但我想知道 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 Core 实现此目标的最佳方法?需要使用哪些类?

顺便提一下,"% 26" 意味着您的随机数据分布不均匀,因此您的随机生成器当前会更喜欢某些字母。 - vcsjones
2
顺便说一句,严格来讲,令牌并不是“哈希”,因为它只是一个随机序列。 - Ilya Chernomordik
1个回答

9

RNGCryptoServiceProvider 在 .NET Core 中不存在。使用 RandomNumberGenerator.Create() 来获取一个在正确平台上工作的 CSPRNG 实例。其 API 与 RNGCryptoServiceProvider 相同,唯一的区别是缺少了 GetNonZeroBytes 方法(我认为本来就不应该有这个方法)。

在 Windows 上,它将转化为 CNG 中的 BCryptGenRandom,在 Linux 上将使用 OpenSSL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接