4

VS2010を使用するプロジェクトでは、Entity FrameworkModelFirstを使用しています。

.edmxウィンドウまたはプロパティpasswordウィンドウでフィールドを暗号化するように設定する方法があるのではないかと思います。生成された.csファイルは、モデルを変更するたびにカバーされるため、変更したくありません。

4

2 に答える 2

5

EFには暗号化のサポートが組み込まれておらず、データベース暗号化メカニズムもサポートされていません(データベース全体を暗号化するSQL Serverで透過的な暗号化を使用している場合を除く)。

回避策として、アプリケーションで一元化された暗号化と復号化を行うことができます。ここに高レベルのアイデアがあります:

  • 暗号化されたデータのプロパティを使用しstringます-このプロパティはnvarchar、ターゲットデータベースの列として表されます
  • または継承された部分クラスSaveChangesのメソッドをオーバーライドします(ObjectContextまたは継承されたクラスのイベントを処理します)。このメソッド/ハンドラーでは、または状態(useまたは)にあるエンティティのすべてのインスタンスを検索し、暗号化する必要があるプロパティから値を取得して暗号化し、暗号化された値をBase64形式でプロパティに保存します。すべてのインスタンスのプロパティを暗号化した後のオーバーライド呼び出しの場合。DbContextSavingChangesObjectContextAddedModifiedObjectStateManagerDbChangeTrackerSaveChangesbase.SaveChanges
  • ObjectMaterialized継承されたクラスでも処理ObjectContextし(DbContextでは、インスタンスからインスタンスIObjectContextAdapterを取得するために使用する必要があります)、プロパティから暗号化された値を取得し、Base64形式からバイト配列に変換し、復号化してプロパティに保存します。プロパティ値を変更すると状態が変更される可能性があるため、これにより他の問題が発生する可能性がありますが、修正することもできます。ObjectContextDbContext
于 2012-07-30T08:15:26.670 に答える
1

より簡単なオプションは、暗号化と復号化を処理する新しいプロパティを追加する部分クラスを作成することです。次に、テーブルオブジェクトのPasswordプロパティではなく、コードでこの新しいプロパティを参照します。

Partial Public Class ObjectName
  Public Property PasswordValue As String
    Get
      Return Password.Decrypt()
    End Get
    Set(value As String)
      Password = value.Encrypt()
    End Set
  End Property
End Class

この場合、それを行うために文字列オブジェクトに拡張メソッドを作成しました。次のリンクのコードを使用して、暗号化と復号化を行いました。

文字列の暗号化と復号化

于 2013-09-25T13:16:29.300 に答える