Как я могу ввести шифрование / дешифрование в Entity Framework Core при сохранении / загрузке Entity? - PullRequest
0 голосов
/ 07 апреля 2020

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

public string SecretValue {get; set;}

Мне бы хотелось автоматическое шифрование секретного значения при сохранении объекта в БД и автоматическое его дешифрование при загрузке из БД. Таким образом, я могу чувствовать себя счастливее от того, что мы храним в БД, и разработчикам не придется беспокоиться о проблемах шифрования, так как это будет обрабатываться на очень низком уровне.

У меня был Мы думали сделать это так, как в старом EF, мы могли бы переопределить методы DBContext SaveChanges и ObjectMaterialization, но, очевидно, EFCore 3.1 не может быть переопределен таким же образом. Имеется какая-то вещь с очень низким уровнем перехватчика БД, но она кажется слишком низкой для моих целей; Я не хочу go пробираться через SQL.

У меня есть еще одна идея, которая заключается в добавлении другого свойства к сущности, например

public string PlaintextSecretValue { get { return MyEncryptionTool.Decrypt(SecretValue); } set { SecretValue = MyEncryptionTool.Encrypt(value); } }

А затем каким-то образом запретить разработчикам прямой доступ к свойству SecretValue, одновременно позволяя EF автоматически загружать и сохранять его в БД. Но для того, чтобы это было разработано правильно, я думаю, что MyEncryptionTool нужно было бы каким-то образом внедрить, сконструировать его с секретным ключом из config, и я не знаю, как это сделать.

Любые идеи, пожалуйста

...