Как правильно сохранить пароль
Я пытаюсь написать программу, с помощью которой вы можете войти на удаленный сайт. Для некоторых людей, имеющих несколько учетных записей, я стараюсь упростить их и сохранить данные учетной записи в IsolatedStorage
, В текущем состоянии моего кода, пароль только что введен в TextBox
и как только он будет сохранен, он будет преобразован в хеш MD5.
Теперь я хотел бы реорганизовать это в правильный код, но я застрял.
PasswordBox
выставляет свои данные через PasswordBox.SecureString
а также PasswordBox.Password
,
Поэтому, нажимая кнопку "Сохранить", я выполняю что-то вроде
public void OnClick(...)
{
var password = passwordBox.Password;
// store it somehow (e.g. custom MD5 encryption)
var savePassword = passwordBox.SecureString;
// store this string somehow, but how?
}
Здесь мои вопросы
- Как только я поставил простой пароль от моего
PasswordBox
вvar password
что-то видно в памяти? Может ли какой-нибудь хакер сделать это простое значение видимым через отражение / отладку? Какой код делает эти строки действительно видимыми? И что мне нужно знать? - Как обращаться
SecureString
изPasswordBox
?
Я немного ошеломлен всем этим, и пока не могу понять суть того, как правильно обрабатывать пароли в приложении.
Я не прошу полного решения и выполнения кода. Я просто был бы рад, если бы кто-то мог начать меня. А также, я не хочу корпоративного решения. Я просто ищу тот, который легко реализовать и максимально сэкономить на усилиях, которые я вложил.
1 ответ
Вам действительно нужен пароль, чтобы быть обратимым?
Более безопасный способ хранения - солить и перемешивать.
Пользователь: JOHN
Пароль: (начинается как) myUserPassword667!
Затем используйте какой-нибудь уникальный код базы данных против пользователя в БД. Скажем, GUID.
Теперь у вас есть abcd-1234-12-1212121ab
как уникальность для ДЖОНА
так что теперь у вас есть базовый пароль (до хэширования)
myUserPassword667!abcd-1234-12-1212121ab
Теперь вы можете хэшировать это с помощью одного из алгоритмов хэширования SHA в System.Security
Пространство имен.
Теперь у вас внутри есть немного соли, которую вы применяете к алгоритму хеширования... (только часть вашего кода)
MySecretSaltWords559BC
затем сохраните Результат как Base64 или Binary в вашей БД.
Ab09l\311sas==
(Упрощенный)
В следующий раз, когда пользователь входит в систему, вы находите свою запись в БД, вы получаете свой Уникальный код, который использовался при создании учетной записи, и присоединяете к введенному им паролю.
Хэшируйте введенный пароль той же техникой и двоично сравнивайте результат, тогда вам не нужно будет хранить их пароль. Если хэши не совпадают, у вас нет того же пароля.