Лёгкая Авторизация

Тема в разделе "Codebase - Общий по .NET и C#", создана пользователем akisawa, 14 июн 2012.

  1. akisawa

    akisawa New Member

    Регистрация:
    12 май 2012
    Сообщения:
    2
    Симпатии:
    0
    Вот пример библиотеки авторизации в WinForms. В ней пароли шифруются главным ключом, который труднодоступен для пользовталей, у каждого из которых свой пароль. В коде присутствуют пляски с бубном, потому что в VS2005 (не знаю, как в новых) иногда теряется конец потока, шифрующего xml, что может проявляться очень редко.
    В ASP.NET, когда не нужны навороты MS, использую свою БД с таблицей, в которой в качестве хеша паролей (сами пароли не хранятся) использую пароль, зашифрованный собой же,
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">например</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    static bool Check(string password, ref string hash)
    {
    if (string.IsNullOrEmpty(password))
    {
    if (hash == string.Empty)
    return true;
    return false;
    }
    SymmetricAlgorithm sa = new DESCryptoServiceProvider();
    sa.GenerateIV();
    if (!string.IsNullOrEmpty(hash) && hash.Length >= sa.IV.Length * 2)
    sa.IV = Convert(hash.Substring(0, sa.IV.Length * 2));
    sa.Key = psw2key(password, sa.KeySize / 8);
    if (sa.Key == null) return false;
    MemoryStream fout = new MemoryStream();
    using (CryptoStream encStream = new CryptoStream(fout, sa.CreateEncryptor(), CryptoStreamMode.Write))
    {
    byte[] w = Encoding.Unicode.GetBytes(password);
    encStream.Write(w, 0, w.Length);
    }
    byte[] buffer = fout.ToArray();
    if (string.IsNullOrEmpty(hash))
    {
    hash = Convert(sa.IV) + Convert(buffer);
    return true;
    }
    else if (hash.Length >= sa.IV.Length * 2 && hash.Substring(sa.IV.Length * 2) == Convert(buffer))
    return true;
    return false;
    }

    static string Convert(byte[] bytes)
    {
    string s = string.Empty;
    foreach (byte b in bytes)
    {
    string t = System.Convert.ToString(b, 16);
    if (t.Length == 1) t = "0" + t;
    s += t.ToUpper();
    }
    return s;
    }

    static byte[] Convert(string s)
    {
    byte[] b = new byte[(int)s.Length / 2];
    for (int i = 0; i < b.Length; i++)
    b[i] = System.Convert.ToByte(s.Substring(i * 2, 2), 16);
    return b;
    }
    где psw2key (генерация ключа из пароля) можно взять из вышеуказанного архива.
     
  2. Innusik

    Innusik Гость

    ох..ребя а где здесь спросить можно насчет программ на си шарпе?
     
  3. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    А вопрос то в чем?
     
  4. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Зачем? Чем это лучше SHA1 хеша пароля (+ разумеется соль)?
     
Загрузка...
Похожие Темы - Лёгкая Авторизация
  1. hoyp
    Ответов:
    0
    Просмотров:
    992
  2. Runinterface
    Ответов:
    4
    Просмотров:
    73
  3. seoman2
    Ответов:
    52
    Просмотров:
    2.532
  4. aameno2
    Ответов:
    6
    Просмотров:
    1.300
  5. shpion8888
    Ответов:
    0
    Просмотров:
    970

Поделиться этой страницей