私はユーザーの個人情報を暗号化された暗号テキストとして保存することができますが、暗号化/オブジェクト。Get/Setのオブジェクトプロパティを暗号化/復号化するためのデザインパターン
たとえば、私はPatientオブジェクトがあり、オブジェクトのプロパティは社会保障番号(SSN)などの個人情報です。私は暗号化された値としてデータベースにこれを保存したいまだ、このような...
// Getting the unencrypted SSN
var currentSSN = selectedPatient.SSN;
// Setting the unencrypted SSN, but will be encrypted in Setter
selectedPatient.SSN = "555-55-5555";
ような構文を使用してSSNを設定/アプリケーションコードを取得できるように、私は、次のようなゲッターとセッターに暗号化/復号化を配置しようとしました...
public string SSN
{
get
{
return MyEncryptionClass.Decrypt(this.SSN);
}
set
{
value = MyEncryptionClass.Encrypt(value);
}
}
注:キーと初期化ベクトルを想定するが、両方の暗号化/復号化の方法によって処理されます。私はGet/Set部分に集中したいと思っていました。
問題は、SetterにEncryptメソッドがあるにもかかわらず、SSNがデータベースレコードにプレーンテキストとして格納されていることです。私は、暗号化ルーチンが実際に適切な暗号テキストを返すことをデバッグすることで確認することができますが、データベースレコードには格納されていないようです。私の考えは、Get/Setはやや円形です。その値を設定することで、私はdecryptメソッドを呼び出して、レコードに格納されているものが実際に復号化されるようにしています。
この暗号化/復号化をオブジェクトのコンシューマにシームレスにすることができるように、人々が見つけたパターンがありますか?私は手動で暗号化/復号化メソッドを呼び出さなくてもいいようにしたい。
EDIT - 私は、次の可能性がEntity FrameworkのV6
データアクセスコードは、オブジェクトのちょうど別のクライアントです。データアクセスコードがSSNプロパティの値を読み取ってデータベースに格納しようとすると、他のクライアントと同じように暗号化されていない値が取得されます。 –
データアクセスの仕組みを教えてください。具体的には、オブジェクトのデータをデータベースにどのように格納しますか?エンティティフレームワークを使用していますか? –
意味があります。どのようにより良いパターンを設計するための任意の提案?私はデータアクセスのためにEntity Framework 6 Code Firstを使用します。 – webworm