Мне нужно обновить поле в приложении DataTable в С#, когда пользователь изменяет данные.
DataTable — это DataTable в памяти — я сохраняю и загружаю в него любые данные в файл XML (метод writeXML), поэтому базовая база данных отсутствует. Я использую это для хранения некоторой информации о входах в систему, и поэтому у меня есть поле пароля, которое я хочу зашифровать. Это важно, поскольку, когда я запускаю сохранение в XML, в противном случае пароль будет записан в незашифрованном виде.
Я смотрю на это двумя разными способами и был бы признателен за отзыв.
Загрузите из XML, затем расшифруйте все значения пароля в каждой строке и зашифруйте их непосредственно перед сохранением в XML. Я мог бы использовать что-то вроде:
foreach (DataRow row in tmp.Rows) { row["PW"] = EncryptIt(row["PW"].ToString()); }
Однако это выглядит несколько небезопасно. Это дало бы мне DataTable в памяти с расшифрованными паролями. Но я полагаю, ничем не отличается от расшифровки паролей по одному при использовании...
Храните пароли в DataTable в памяти в зашифрованном виде. Но когда пользователь использует экран для редактирования записей, я мог бы зашифровать значение, введенное в TextBox после того, как пользователь ввел его. Затем я мог бы также расшифровать значение из DataTable всякий раз, когда мне нужно его использовать. Это позволит сохранить пароли в зашифрованном виде в DataTable, но мне придется расшифровывать их, когда мне нужно их использовать, поэтому я не уверен, что это действительно более безопасно, чем более простой метод, описанный выше.
Что вы думаете о методе 1 и 2 выше?
Метод № 2 выше также вводит некоторые дополнительные вопросы о том, как лучше всего шифровать данные — под этим я подразумеваю использование какого события?
Я играл с EditValueChanged
и TextChanged
, но они оба срабатывают при каждом изменении символа. Мне также пришлось бы учитывать различные случаи, такие как выход из поля и не выход из поля в случае, когда пользователь меняет поле, а затем просто нажимает кнопку «Сохранить», не выходя из поля.
Как вы собираетесь обновлять базовое поле DataTable, когда пользователь изменяет TextBox, связанный данными с этим полем (через источник привязки)?
Я начинаю думать, что первый вариант будет проще в реализации и не хуже с точки зрения безопасности. Или я что-то упускаю?