SORU
16 Aralık 2013, PAZARTESİ


ASP.NET Kimlik varsayılan Şifre elinde olursa, nasıl çalışır ve güvenli mi?

Hava varsayılan MVC 5 ile gelen UserManager uygulanan ve Kimlik Çerçevesinde, yeterince güvenli ASP.NET bir Parola İnanılmaz merak ediyorum? Ve eğer öyleyse, eğer nasıl çalıştığını bana açıklayabilir misiniz?

İPasswordHasher arayüzü bu gibi görünüyor:

public interface IPasswordHasher
{
    string HashPassword(string password);
    PasswordVerificationResult VerifyHashedPassword(string hashedPassword, 
                                                       string providedPassword);
}

Gördüğünüz gibi, bir tuz sürmüyor, ama bu konu söz edilir: "7**" perde arkasında tuz aslında yok. Çok merak ediyorum bu nasıl oluyor? Ve nerede bu tuz nereden geliyor?

Benim endişem tuz statik, oldukça güvensiz oluşturma.

CEVAP
16 Aralık 2013, PAZARTESİ


Varsayılan uygulama olarak çalışıyor. Rastgele tuz Key Derivation Function karma üretmek için kullanır. Tuz, TURUNCU, çıkış parçası olarak dahil edilmiştir. Böylece, her zaman, "karma" farklı sağlamalarının alacak aynı şifre. Karma doğrulamak için çıktı, tuz ve diğerlerinden ayrılır, TURUNCU, şifreyi tekrar belirtilen tuz ile çalıştırın. Eğer sonuç ilk çıkış geri kalanı için eşleşirse karma doğrulanır.

Karma:

public static string HashPassword(string password)
{
    byte[] salt;
    byte[] buffer2;
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
    {
        salt = bytes.Salt;
        buffer2 = bytes.GetBytes(0x20);
    }
    byte[] dst = new byte[0x31];
    Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
    Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
    return Convert.ToBase64String(dst);
}

Doğrulama:

public static bool VerifyHashedPassword(string hashedPassword, string password)
{
    byte[] buffer4;
    if (hashedPassword == null)
    {
        return false;
    }
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    byte[] src = Convert.FromBase64String(hashedPassword);
    if ((src.Length != 0x31) || (src[0] != 0))
    {
        return false;
    }
    byte[] dst = new byte[0x10];
    Buffer.BlockCopy(src, 1, dst, 0, 0x10);
    byte[] buffer3 = new byte[0x20];
    Buffer.BlockCopy(src, 0x11, buffer3, 0, 0x20);
    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, dst, 0x3e8))
    {
        buffer4 = bytes.GetBytes(0x20);
    }
    return ByteArraysEqual(buffer3, buffer4);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012
  • VvCompHelpvV

    VvCompHelpvV

    4 EYLÜL 2007
  • warningthepeople

    warningthepe

    21 EYLÜL 2011