2016-11-23 11 views
0

ASP.NET MVC C#を使用してWebアプリケーションを構築しています。 私は機能を使用して途中でデータを符号化しています:MVCモデルのDBからエンコードされたデータを取得し、それをデコードして表示する方法

public string Encode(string encodeMe) 
{ 
    byte[] encoded = System.Text.Encoding.UTF8.GetBytes(encodeMe); 
    return Convert.ToBase64String(encoded); 
} 

これはクラスのコンストラクタに呼び出されますので、良い今のところ

public Booking(string name, string phone, string email, string date) 
{ 
    Name = Encode(name); 
    Phone = Encode(phone); 
    Email = Encode(email); 
    PreferredTime = DateTime.Parse(date); 
} 

、および暗号化されたデータがデータベースに書き込まれます。

しかし、私はこの機能を使用して、私は戻ってそれを読んだときにそのデータをデコードします:

public static string Decode(string decodeMe) 
{ 
    byte[] encoded = Convert.FromBase64String(decodeMe); 
    return System.Text.Encoding.UTF8.GetString(encoded); 
} 

私はこのような集合{}文でこれを追加しようとしている:

public string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     _name = Decode(value); 
    } 
} 

今何が起こるのですか?予約レコードはコンストラクターによってdb.Booking.Add(booking);に正しくエンコードされますが、このSet {}ステートメントは実行中にdb.SaveChanges();が呼び出され、暗号化されていないデータがデータベースに追加されますが、以前に暗号化されたデータはDisplayの検索時に正しくデコードされます。暗号化されていないデータをデコードしようとすると、例外が発生します。

+0

申し訳ありませんが、より多くのデータを使用するなど、すべてを長くすることで解決しようとしています。また、!=暗号化をエンコードします。これはまったく不必要なようです。まともなデータベースであれば、そのままBase64エンコーディングを使用して文字列を格納することができます。 –

+0

この時点では、エンコードやデコードに使用されるメソッドについては心配していません。後で変更することができます。データベースのデータを暗号化したい。私はちょうど途中でそれを暗号化する技術を習得し、それを復号化して表示用に復号したいと思っています。 –

+0

私の答えを見てください。 –

答えて

0

問題は、あなたの財産が不均衡であるということです:それは設定時にデコードしますが、どこでもエンコードしません。

エンティティフレームワークは、これらのプロパティーをと同様に使用します。そのため、EFはgetterを呼び出します。は_name = Decode(value);で設定されています。結果:EFは符号化された値を決して見ることはなく、valueの2番目に分割された値にしか存在しません。

プロパティのデータが常にエンコードされるようにするには、エンコード/デコードをプロパティから外し、「実データ」が必要な場合は(例:表示する場合)自分で行う必要があります。

だから、プロパティだけで次のようになります。

public string Name 
{ 
    get { return _name; } 
    set { _name = value; } 
} 

、あるいはすでにプロパティに割り当てる前Encode()を使用しているBookingコンストラクタで

public string Name { get; set; } 


「実際の」値が必要な他の場所では、Decode(Name)などを使用する必要があります。

関連する問題