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

  • kylelandry

    kylelandry

    9 AĞUSTOS 2007
  • pissengehen

    pissengehen

    26 EYLÜL 2006
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008