2016-10-28 35 views
5

我需要生成隨機唯一哈希以用於.Net Core中的密碼重置鏈接。在ASP.NET身份識別中,我發現這很有幫助,我想知道是否RNGCryptoServiceProvider仍然可以確保生成的哈希的隨機性。使用.NET Core生成哈希

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核心和使用哪些類?

+0

作爲一個附註,'%26'意味着你的隨機數據不會有均勻的分佈,所以你的隨機生成器目前比其他人更喜歡一些字母。 – vcsjones

+2

順便說一下,標記嚴格來說不是「散列」,因爲它只是一個隨機序列。 –

回答

8

RNGCryptoServiceProvider不在.NET Core中。使用RandomNumberGenerator.Create()可獲取將在正確平臺上工作的CSPRNG實例。其API與RNGCryptoServiceProvider相同,只是GetNonZeroBytes丟失(我認爲應該不會在那裏)。

在Windows上,這將歸結爲CNG中的BCryptGenRandom,在Linux上它將使用OpenSSL。