2017-08-10 81 views
0

我正在开发一个webapi核心项目,并且在创建时需要salt和hash用户密码。 我发现这个代码在线,这可能有助于做到这一点的asp.net核心。验证在asp.net webapi核心项目中的用户名和密码

当用户登录系统时,如何验证用户名和密码?

using System; 
    using System.Security.Cryptography; 
    using Microsoft.AspNetCore.Cryptography.KeyDerivation; 

    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.Write("Enter a password: "); 
      string password = Console.ReadLine(); 

      // generate a 128-bit salt using a secure PRNG 
      byte[] salt = new byte[128/8]; 
      using (var rng = RandomNumberGenerator.Create()) 
      { 
       rng.GetBytes(salt); 
      } 
      Console.WriteLine($"Salt: {Convert.ToBase64String(salt)}"); 

      // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations) 
      string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
       password: password, 
       salt: salt, 
       prf: KeyDerivationPrf.HMACSHA1, 
       iterationCount: 10000, 
       numBytesRequested: 256/8)); 
      Console.WriteLine($"Hashed: {hashed}"); 
     } 
    } 

回答

1

该盐也需要保存,通常只是在盐的前缀散列。

验证获得盐后,再次运行KeyDerivation.Pbkdf2并比较得到的哈希值。