SORU
26 Ocak 2010, Salı


Karma ve tuz şifreleri C#

Sadece Hashing User Passwords DavidHayden makaleleri birini geçiriyordum.

Gerçekten başarmak için çalışıyoruz ne olduğunu bulamıyorum.

İşte onun kodu

private static string CreateSalt(int size)
{
    //Generate a cryptographic random number.
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] buff = new byte[size];
    rng.GetBytes(buff);

    // Return a Base64 string representation of the random number.
    return Convert.ToBase64String(buff);
}

private static string CreatePasswordHash(string pwd, string salt)
{
    string saltAndPwd = String.Concat(pwd, salt);
    string hashedPwd =
        FormsAuthentication.HashPasswordForStoringInConfigFile(
        saltAndPwd, "sha1");
    return hashedPwd;
}

Başka C# şifreleri karma ve tuz ekleme yöntemi?

CEVAP
26 Ocak 2010, Salı


Aslında bu biraz garip, üyelik sağlayıcısı yapılandırma dosyaları içine koymak için yapar dize dönüşümleri ile. Karma ve tuzları ikili BLOB, METİN dosyaları içine koymak istemiyorsan dizeleri dönüştürmek için gerek yok.

Benim kitabımda Beginning ASP.NET Security, (oh nihayet, pezevenk için bir bahane kitap) takip ediyorum

static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt)
{
  HashAlgorithm algorithm = new SHA256Managed();

  byte[] plainTextWithSaltBytes = 
    new byte[plainText.Length   salt.Length];

  for (int i = 0; i < plainText.Length; i  )
  {
    plainTextWithSaltBytes[i] = plainText[i];
  }
  for (int i = 0; i < salt.Length; i  )
  {
    plainTextWithSaltBytes[plainText.Length   i] = salt[i];
  }

  return algorithm.ComputeHash(plainTextWithSaltBytes);            
}

Tuz üretimi söz konusu örnek olarak. Bayt dizileri Encoding.UTF8.GetBytes(string) kullanarak metin dönüştürebilirsiniz. Eğer dize gösterimine bir karma dönüştürmek gerekir Convert.ToBase64String Convert.FromBase64String geri dönüştürmek için kullanabilirsiniz.

Olamaz bayt dizileri eşitlik operatörü kullanmak gerekir, başvurularını kontrol eder ve bu yüzden sadece iki dizi böylece her bayt kontrol döngü gerekir

public static bool CompareByteArrays(byte[] array1, byte[] array2)
{
  if (array1.Length != array2.Length)
  {
    return false;
  }

  for (int i = 0; i < array1.Length; i  )
  {
    if (array1[i] != array2[i])
    {
      return false;
    }
  }

  return true;
}

Her zamanşifre başına yeni bir tuz kullanın. Tuzları gizli tutulması gerekmez ve karma kendisi ile birlikte saklanabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009