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

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • knopik96

    knopik96

    7 Mayıs 2011
  • YAN TV

    YAN TV

    20 EKİM 2011