2

ユーザーの詳細を取得する機能があります

いくつかのフィールドを暗号化しました。LINQ が実際の SQL クエリを実行する方法を知りたい

public User GetUserByEmail(string email)
{
      return _db.Users.Where(x => x.LastName.Decrypt() == "Patel").ToList();
}

x.LastName.Decrypt()は、SQL からすべてのレコードを取得し、コード側の各フィールドで復号化を実行しますか?

私が使用するとどうなりますか

public User GetUserByEmail(string email)
{
      return _db.Users.Where(x => x.LastName == "Patel".Encrypt()).ToList();
}

どちらの方がよいですか

4

2 に答える 2

1

EF プロバイダーは関数を SQLに変換する方法を認識していないためAsEnumerable()、 、ToList、またはを呼び出して強制的にデータをメモリに取り込まない限り、最初のクエリはまったく機能しない可能性があります。ToArrayEncrypt

一方、2 番目のクエリは、文字列間の比較であるため、正常に動作するはずです。

Decryptさらに、クエリの 2 番目の方法では、メッセージ ダイジェストを保存する場合など、文字列を "暗号化" して で元に戻すことができない場合に、潜在的により安全なスキームを実装できます。

于 2013-09-24T13:07:27.993 に答える
0

関数を呼び出す.Decrypt()と、各行およびすべてWhereの行で暗号化が解除されます。LastName表示した .Encrypt() メソッドを使用すると、'Encrypt` が 1 回呼び出され、各 LastName が "Pate1" の暗号化された文字列と比較されます。

于 2013-09-24T13:06:25.777 に答える