2017-08-10 8 views
0

私はWEBAPIコアプロジェクトに取り組んでいますし、作成したとき、私は塩とハッシュユーザーのパスワードを必要としているユーザ名とパスワードを検証します。 私は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を実行し、結果のハッシュを比較し、塩を得ます。