2010-10-17 2 views
0

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

В принципе, мне нужно иметь возможность принимать пароль от пользователя в приложении WPF, шифровать его, а затем хранить в базе данных и впоследствии расшифровывать. Однако я не уверен, как это реализовать.

Это совершенно тривиально, так ли это безопасно или нет, не имеет значения. Все, что мне нужно, это заставить его работать только. Я точно не знаю, как это сделать. Я пробовал играть с DESCryptoServiceProvider(), но ничего не получил.

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

Любые предложения?

Редактировать: Чтобы уточнить, я не могу «закодировать». Он должен быть зашифрован для целей этого упражнения (т. Е. Он должен иметь сгенерированный ключ). Я считаю, что SHA - это алгоритм кодирования, а не шифрование.

+0

Вы действительно имеете в виду, что вам необходимо впоследствии расшифровать пароль? Или вы хотите сохранить зашифрованный пароль, а затем сравнить его с другим зашифрованным паролем? Нужно ли вам читать исходный пароль из базы данных или нет? – andynormancx

+0

Да, моя ошибка. Мне просто нужно сравнить эти два. – NRaf

+0

, тогда он не называется шифрованием, он хеширует –

ответ

2

Вам необходимо сохранить необратимый соленый хэш код пароля.

Использование SHA512Managed.

3

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

Не забудьте солить его!

4

Не пытайтесь использовать для этого свою схему, вы, вероятно, получите что-то неправильно и оставите ее небезопасной.

Лучше использовать что-то наподобие BCrypt, чтобы сделать это за вас.

И как сохранить его, BCrypt вернет строковое кодирование хэшированного пароля, который очень легко хранить в базе данных.

Чтобы быть ясным, он работает следующим образом.При первом хранить пароли пользователей вы:

  • получить пароль от пользователя
  • передать пароль методу BCrypt HashPassword
  • возвращает строку, которая является хэш пароля
  • вам хранить хэш в базе данных с записью пользователя

Когда пользователь приходит войти позже вам:

  • получить пароль от пользователя
  • получить хэш для пользователя из базы данных
  • передать хэш и пароль пользователя при условии, методу BCrypt CheckPassword
  • BCrypt возвращает истину или ложь в зависимости от того, пароль соответствует
+0

Где будет храниться ключ? – NRaf

+0

Какой ключ? Очень сложно сочетать термины, которые вы используете, именно то, что вы пытаетесь сделать. – andynormancx

+0

Извинения. Наверное, я смутился. Я второй раз посмотрел на то, что на самом деле сказал мой учитель, и взял его, чтобы поглотить его.Я смутил различие между шифрованием и кодированием, которое, я полагаю, является причиной этого беспорядка публикации. – NRaf

0

Если вы используете SQL Server 2005 или более позднюю версию, вы можете использовать для защиты данных, не записывая свой собственный код расшифровки/шифрования, built-in encryption in the database.

Эта статья охватывает SQL 2005 - для запуска SQL 2008 here.

Алгоритмы шифрования определения данных преобразования, которые не могут быть легко обратной несанкционированными пользователями. SQL сервер позволяет администраторам и разработчиков выбирать из нескольких алгоритмов, включая DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, 128-битного RC4, DESX, 128-битного AES, 192-битного AES и 256 -бит AES.

Смежные вопросы