Как сравнить зашифрованный пароль в SQL - PullRequest
0 голосов
/ 26 сентября 2011

Я уже зашифровал свой пароль и сохранил его в базе данных, но теперь я хочу сравнить зашифрованное значение с паролем, который пользователь вводит при загрузке страницы. Рассмотрим этот код:

string userName = txtusername.Text;
string password = txtpassword.Text;
Encryptor en = new Encryptor(EncryptionAlgorithm.Rc2, CreateRandomPassword(7));
password = en.Encrypt(password);            
DataTable dt = uMManager.ValidateUser(userName, password);

Метод CreateRandomPassword

private static string CreateRandomPassword(int passwordLength)
{
  string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
  char[] chars = new char[passwordLength];
  Random rd = new Random();

  for (int i = 0; i < passwordLength; i++)
  {
     chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
  }
  return new string(chars);
}

Класс шифрования

public class Encryptor
    {
        EncryptEngine engin;
        public byte[] IV;

        public Encryptor(EncryptionAlgorithm algID, string key)
        {
            engin = new EncryptEngine(algID, key);
        }

        public EncryptEngine EncryptEngine
        {
            get
            {
                return engin;
            }
            set
            {
                engin = value;
            }
        }

        public string Encrypt(string MainString)
        {
            MemoryStream memory = new MemoryStream();
            CryptoStream stream = new CryptoStream(memory, engin.GetCryptTransform(), CryptoStreamMode.Write);
            StreamWriter streamwriter = new StreamWriter(stream);
            streamwriter.WriteLine(MainString);
            streamwriter.Close();
            stream.Close();
            IV = engin.Vector;
            byte[] buffer = memory.ToArray();
            memory.Close();
            return Convert.ToBase64String(buffer);

        }
    }

Я сделал локальный метод для генерации случайной строки для шифрования RC2. EncryptionAlgorithm - это перечисления для типов шифрования. Теперь, как я могу сравнить «пароль» с полем пароля в моей базе данных, чтобы проверить правильность учетных данных

Ответы [ 4 ]

2 голосов
/ 26 сентября 2011

Вы не можете проверить правильность учетных данных, поскольку вы зашифровали их с помощью ключа, который вы выбросили.Если вы храните ключ вместе с паролем, шифрование не имеет смысла.Если вы этого не сделаете, вы не сможете проверить.

Вместо того, чтобы пытаться создать новый способ хранения паролей, почему бы не использовать один из способов , который известен как работающий

1 голос
/ 26 сентября 2011

Не шифруйте пароли.Хэш их.Шифрование позволяет получить пароль в виде открытого текста, что является плохой вещью.Хеширование все еще позволяет вам проверить, совпадает ли то, что пользователь вводит с тем, что он делал раньше

0 голосов
/ 26 сентября 2011

похоже, вы используете каждый раз случайный ключ для шифрования вашего пароля

так что если

u зашифровывает "тест" в первый раза затем вы шифруете «тест» во второй раз.результат двух шифрований не одинаков.

Вы должны просто использовать алгоритм хеширования

0 голосов
/ 26 сентября 2011

Вот поток программы:

  • Когда пользователь регистрирует новую учетную запись -> Вы шифруете свой пароль -> Сохраняете его в базе данных
  • Когда пользователь входит -> Зашифровывает вводпароль -> Получить пользователя с паролем в базе данных -> Если пользователь не нулевой -> Вход в систему успешен -> Остальное -> Ошибка входа
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...