Как правильно сохранить пароль

Я пытаюсь написать программу, с помощью которой вы можете войти на удаленный сайт. Для некоторых людей, имеющих несколько учетных записей, я стараюсь упростить их и сохранить данные учетной записи в 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== (Упрощенный)

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

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

Другие вопросы по тегам