2

Я пытаюсь написать программу, с помощью которой вы можете войти на удаленный веб-сайт. Для некоторых людей, имеющих несколько учетных записей, я стараюсь упростить их и хранить данные учетной записи в IsolatedStorage. В текущем состоянии моего кода пароль вводится только в TextBox и сразу же после его преобразования преобразуется в хэш MD5.Как правильно сохранить пароль

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

A 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?

Я немного перегружен всем этим, и я не могу понять, как правильно обрабатывать пароли в приложении.

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

+2

Если злоумышленник может запустить отладчик или использовать отражение на личных данных *, то у них уже есть система *. –

ответ

1

Вам действительно нужен пароль для обратимости?

Более безопасный способ хранения - это соль и хэш.

Пользователь: JOHN

Пароль: (начинается как) myUserPassword667!

Затем с помощью какой-то базы данных уникального кода от пользователя в БД. Давайте скажем GUID.

Теперь у вас есть abcd-1234-12-1212121ab как uniquifier для JOHN

так теперь у вас есть базовый пароль (до хеширования)

myUserPassword667!abcd-1234-12-1212121ab

Теперь вы можете создать хаш это с одним из SHA или другого хеширования алгоритмы в пространстве имен System.Security.

Теперь внутри есть соль, которые вы применяете к вашему алгоритму хеширования ... (часть вашего кода только)

MySecretSaltWords559BC

затем сохранить результат в виде либо Base64 или Binary в вашей БД.

Ab09l\311sas== (упрощенный)

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

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

+0

Мне не нужно, чтобы он был обратимым, и вот как это работает в данный момент. С учетом вашего ответа, единственный вопрос, который у меня есть, - как правильно получить простой пароль из 'PasswordBox'? Назначает ли равное значение пароля переменной с плохой практикой? Как с этим бороться? –

+0

Я бы сказал, что используйте Encoding.UTF8.GetBytes (securestring), добавьте их в memystream, добавьте свой uniquifier и затем подайте в Sha. Затем вы можете Array. Очистите байты от кодировки, и вы можете перемотать свой memystream и заполнить 0 до удаления (если хотите) или просто Dispose –

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