Авторизация пользователя. Как хранить логин и пароль - C#
Формулировка задачи:
Всем добрый день!
Наконец-то добралась до авторизации пользователя. Отсюда вопрос:
Где и как хранить логины и пароли?
хочется в файле на диске. но его наверно надо как-то закодировать... как?
сразу скажу, что прогу надо защитить не от супер хакера, а от простого рядого юзера, чтобы он не мог войти в режиме администратора и не мог узнать логин/пароль админа просто открыв файлик на диске.
то есть как бы файлик защитить, но попроще?!
заранее всем спасибо за код или ссылочки (или хотя бы правильную формулировку запроса в гугл =) )!!!
Решение задачи: «Авторизация пользователя. Как хранить логин и пароль»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;
namespace MyNameSpace
{
class Encryptor
{
string encryPass;
string encryString;
public Encryptor()
{
encryPass = CreSap();
}
public Encryptor(string encrStr)
{
encryPass= CreSap();
encryString = Encrypt(encrStr);
}
public string EncryptStr
{
get { return encryString; }
set { encryString = Encrypt(value); }
}
double SimAlgEncry(int n)
{
if (n == 0)
{
return 0;
}
else
{
if (n == 1)
{
return 1;
}
else
{
return SimAlgEncry(n - 1) + SimAlgEncry(n - 2);
}
}
}
string CreSap()
{
return Math.Pow(SimAlgEncry(10),3).ToString();
}
/// <summary>
/// Encrypt string
/// </summary>
/// <param name="source_str"></param>
/// <returns></returns>
string Encrypt(string source_str)
{
// Получаем из строки набор байт, которые будем шифровать
byte[] source_data = Encoding.UTF8.GetBytes(source_str);
// Алгоритм
SymmetricAlgorithm sa_in = Rijndael.Create();
// Объект для преобразования данных
ICryptoTransform ct_in = sa_in.CreateEncryptor(
(new PasswordDeriveBytes(encryPass, null)).GetBytes(16), new byte[16]);
// Поток
MemoryStream ms_in = new MemoryStream();
// Шифровальщик потока
CryptoStream cs_in = new CryptoStream(ms_in, ct_in, CryptoStreamMode.Write);
// Записываем шифрованные данные в поток
cs_in.Write(source_data, 0, source_data.Length);
cs_in.FlushFinalBlock();
// Создаем строку
return Convert.ToBase64String(ms_in.ToArray());
// Выводим зашифрованную строку
}
/// <summary>
/// Decrypt string
/// </summary>
/// <param name="crypt_str"></param>
/// <returns></returns>
string Decrypt(string crypt_str)
{
// Получаем массив байт
byte[] crypt_data = Convert.FromBase64String(crypt_str);
// Алгоритм
SymmetricAlgorithm sa_out = Rijndael.Create();
// Объект для преобразования данных
ICryptoTransform ct_out = sa_out.CreateDecryptor(
(new PasswordDeriveBytes(encryPass, null)).GetBytes(16),
new byte[16]);
// Поток
MemoryStream ms_out = new MemoryStream(crypt_data);
// Расшифровываем поток
CryptoStream cs_out = new CryptoStream(ms_out, ct_out, CryptoStreamMode.Read);
// Создаем строку
StreamReader sr_out = new StreamReader(cs_out);
string source_out = sr_out.ReadToEnd();
return source_out;
}
}
}