Шифровать данные столбца с помощью LINQ - PullRequest
2 голосов
/ 19 мая 2010

Мне было интересно, есть ли простое решение для этого, или я застрял в следующем:

При обновлении БД:

dti.Pass = Crypter.Encrypt(dti.Pass);
_db.SubmitChanges();

При выборе из БД:

Data.DbTableItem dti = _db.Single(a=>a.Id == id);
dti.Pass = Crypter.Decrypt(dti.Pass);

Значение: я не очень-то пишу повторяющийся код, и это кажется логичным, что поддерживается LINQ; так что мне интересно, если это так.

Ответы [ 3 ]

6 голосов
/ 19 мая 2010

Вы можете добавить частичный класс со свойством, инкапсулирующим эту логику, например:

public partial class DbTableItem
{
  public String UnencryptedPass
  {
    get
    {
       return  Crypter.Decrypt(this.Pass);
    }

    set
    {
       this.Pass = Crypter.Encrypt(value)
    }
  }
}

Надеюсь, это поможет:)

4 голосов
/ 19 мая 2010

Вы должны использовать криптографические функции SQL Server, ENCRYPTBYKEY и DECRYPTBYKEY . Еще лучше использовать Прозрачное шифрование базы данных . Прямо сейчас вы шифруете и дешифруете пароль с сохраненным ключом, который знает, где. Базы данных имеют эту неприятную привычку перемещаться и восстанавливаться на совершенно новых машинах в случае аварийного восстановления или в рамках различных сценариев высокой доступности, и вы обнаружите, что хранение зашифрованных данных в базе данных и ключа шифрования в системном ключе Магазин (или, что еще хуже, в приложении) оставил вам кучу «полностью безопасных» данных, которые невозможно расшифровать, потому что вы потеряли ключ.

4 голосов
/ 19 мая 2010

Вы можете определить поддельное свойство Password, которое инкапсулирует логику вашего пароля, и поле оригинального пароля (которое отображается в базе данных - PasswordInternal в моем примере) должно быть, например. internal.

public partial class YourEntity
{
   public string Password
   {
        get
        {
            return Crypter.Decrypt(this.PasswordInternal)
        }
        set
        {
            this.PasswordInternal = Crypter.Encrypt(value)
        }
   }
}

AFAIK, вам не нужны встроенные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...