2014-01-16 4 views
0

У меня есть приложение winform, у которого есть форма для входа в систему. Я храню мои пользователь регистрационной информации в базе данных с 3-мя параметры: имя пользователя, хэшируются пароль, соль:Запомнить меня checkbox

salt = random string that will be stored in database for every user 
hashed password = MD5(MD5(inputPassword) + MD5(salt)) 

Я хочу иметь флажок с именем Remember me в моей форме авторизации, что, когда пользователь вводит правильную информацию и проверить ее , в следующий раз, когда пользователь откроет программу, их пользовательская информация будет введена автоматически, пользователю просто нужно нажать кнопку login.

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

Вопрос:

  1. Как я могу сделать это без сохранения пароля пользователя?

  2. Если мне нужно сохранить некоторую информацию, как зашифровать их?

  3. Необходимо ли изменить мою политику безопасности?

Обратите внимание, что это клиентское/серверное приложение и форма входа в систему, созданная для клиентской стороны.

+0

Несмотря на то, что вы пытаетесь защитить пароли пользователей, выполнив MD5 (MD5 (inputPassword) + MD5 (соль)), вы должны использовать [правильную функцию деривации пароля] (http: // msdn. microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes%28v=vs.110%29.aspx). Современная система может легко попробовать более 1 000 000 000 паролей в секунду с помощью GPU с помощью вашего пароля. С достаточно большим 'ItterationCount' для' Rfc2898DeriveBytes' вы можете легко довести это число до 100-секундных паролей в секунду. –

ответ

1

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

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

0

Как я понимаю, если вы хотите иметь функциональность remember me, то вы должны/должны иметь ваш пароль, хранящийся в любой форме, для аутентификации пользователя.

Один из способов, наличие 2 функциональных возможностей в вашем продукте. Один, чтобы иметь Hash, и это будет в базе данных, и я думаю, что вы делаете это сейчас. Помимо этого, также имеют функциональность до Encrypt/Decrypt. Когда отметят remember me, просто сохраните зашифрованное значение в файле app.config. Теперь, когда пользователь снова открывает приложение, проверьте зашифрованный пароль и расшифруйте его для аутентификации пользователя.

Пользователь dbw просто разместил мой другой подход :)

Надеется, что это помогает.

0

ИМХО, этого не может быть сделано. Если вы шифруете/хешируете/засовываете и сохраняете пароль в БД, вы не можете получить его обратно в виде обычного текста.

Конечно, вы можете обмануть пользователя (я расскажу вам, как), но нужно определить, что вы хотите, чтобы пользователь сделать:

  • Введите по крайней мере пароль еще раз (каждый раз), даже после того, как пользователь попросил «запомнить меня». Это можно сделать легко, просто введите идентификатор пользователя и сохраните пароль. Никаких трюков. Легко и просто. Даже Google делает это для своих сайтов.
  • Теперь трюк время. Пусть пользователь вводит приложение без пароля, а просто имя пользователя. Вы можете просто ввести какое-то значение по умолчанию в поле пароля (пользователь будет считать, что пароль действительно извлекается, но вы будете программировать такой способ, когда всякий раз, когда выбирается опция «запомнить меня», вы просто заполняете эту информацию автоматически), и пусть пользователь переходит но это нехороший вариант, потому что потенциально любой, кто использует эту систему, сможет подключиться к вашему приложению. Вам необходимо будет позвонить по вашему требованию безопасности.
Смежные вопросы