MonoTouch Добавление шифрования в приемник/сеттер

Вопрос:

Я использую базу данных Sqlite в своем приложении с RijndaelManaged Encryption. Шифрование работает отлично. Проблема заключается в том, как добавить шифрование/дешифрование в класс объектов. Ниже приведен класс

 public class MTBL_USER
{
[PrimaryKey, AutoIncrement]
public int UserID { get; set; }

public string LoginID { get; set; }

public string Password { get; set; }
}

Я хотел бы добавить логику шифрования/дешифрования для LoginID и Password в getter и setter. что-то вроде

    public string LoginID
{
get {
EncryptDecryptController decrypt = new EncryptDecryptController ();
return decrypt.Decrypt(LoginID);
}
set {
EncryptDecryptController encrypt = new EncryptDecryptController ();
LoginID = encrypt.Encrypt (value);
}
}

Это не сработает. Каков наилучший способ достичь этого.

Лучший ответ:

Ваш код имеет StackOverflow в нем, это происходит, если вы установили метод LoginID из метода LoginID. Попробуйте добавить личное поле, в котором хранятся данные.

private string _encryptedLoginID = null;

public string LoginID{
  get{ return (new EncruptDecryptController()).Decrypt(_encryptedLoginID);}
  set{ _encryptedLoginID = (new EncruptDecryptController()).Encrypt(value);}
}

Обратите внимание, что сериализатор базы данных /json/xml по-прежнему будет видеть дешифрованное значение, когда они его попросят, так что это, вероятно, не собирается делать трюк для вас.

Продолжите этот код и пометьте свойство LoginID как игнорируемое для вашего метода сериализации; отметьте его внутренним, если сможете. Например:

[DataMemberIgnore]
[JsonIgnore]
[XmlIgnore]
public string LoginID{...}

Затем добавьте другое свойство, _encryptedLoginID напрямую связывается с _encryptedLoginID

public string EncryptedLoginID {
  get {return _encryptedLoginID;} 
  set {_encryptedLoginID=value;}
}

Вы также можете переименовать LoginID в LoginID и EncryptedLoginID в LoginID, если хотите сохранить вещи с меньшими атрибутами.

Имейте в виду, что “шифрование” – это термин, слегка подброшенный, не говоря уже о очень важной части криптозащиты: управление ключами. Если ваш ключ легко восстановить из вашего кода или файлов конфигурации, все это упражнение бессмысленно. Вы будете удивлены, как легко несколько раз пройти через такую защиту. Если вы только замедляете атакующего на несколько часов, вы можете просто кодировать B64 :). Убедитесь, что это не так, и что ваш ключ защищен надлежащим образом независимо от того, что может предложить ОС – не храните его в файлах конфигурации или коде.

Оцените статью
TechArks.Ru
Добавить комментарий