2012-01-18 2 views
0

Можно создать дубликат:
Encrypting passwords in WinForms app.config, .NETЧто является лучшим способом безопасного хранения пароля в файле properties.settings?

Я хочу, чтобы иметь возможность хранить имя пользователя/пароль, пара для коробки входа. Каждый раз, когда приложение загружается, сохраненные учетные данные загружаются из файла Properties.Settings, а затем в поле ввода заполняются эти значения.

Я знаю, что всегда существует вероятность того, что пароль можно взломать, но что-то должно быть лучше, чем сохранение текста clear в файле properties.settings.

Я искал использование SecureString, но все, что вам нужно сделать, - это запретить хранение пароля в открытом виде в памяти.

Любые идеи - лучший способ справиться с этим?

+0

Почему вы не можете просто использовать встроенные механизмы хранения паролей, что обеспечивает ОС Windows? –

+0

Вы контролируете приложение, к которому вы входите? –

+1

В основном повторение http://stackoverflow.com/questions/1392876/encrypting-passwords-in-winforms-app-config-net – Lloyd

ответ

0

Вы можете сохранить только хэш пароля, вместо этого сохранить простой текст. Затем, когда вы сравниваете пароль, хранящийся в базе данных пользователя и введенный пароль, вы сравниваете хеши вместо открытого текста. Посмотрите в System.Security.Cryptography ...

0

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

Также обратите внимание, что извлечение пароля из поля маскированного пароля может быть таким же простым, как отправка сообщения в текстовое поле.

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

С другой стороны, в чем смысл запроса пароля, если вы собираетесь заполнить диалоговое окно? Вы также можете просто показать форму, в которой говорится, что «нажмите enter для входа» без полей.

+0

Поскольку у них есть возможность щелкнуть/снять флажок «Запомнить меня», так что в следующий раз он должен помнить свой пароль при запуске приложения. Если аутентификация завершается успешно, будет использоваться пароль, сохраненный в их файле настроек, и логин не будет отображаться. Мне все равно нужно хранить пароль где-то. Я просто подумал, что было бы неплохо сделать его более безопасным. – jaffa

1

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

Когда я сделал что-то похожее на это некоторое время назад, я сделал следующее:

AES_encrypt (username + saltString1 + password + saltString2) 

магазин результат этого и сохранить ключ AES.

Для заполнения полей:

  • вспоминания данные и ключ
  • расшифровать данные, используя ключ
  • разделить строку о saltString1
  • первое значение раскола является имя пользователя
  • второе значение password + saltString2
    • substrin г с помощью saltString2 и у вас есть пароль
+0

Да, это не имеет ничего общего с хэшированием, предотвращая сохранение пароля в ясном тексте в файле app.config. – jaffa

+1

Итак, пароль зашифрован, а ключ AES - нет. Я полагаю, что это тоже можно зашифровать и сказать «это черепахи полностью вниз», но он должен заканчиваться где-то, и это означает, что любой, у кого * * код, может легко получить пароль так же, как * код. – harold

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