मैं कोशिश कर रहा था और साथ इकाई की रूपरेखा कोड पहले एसक्यूएल डेटा को एन्क्रिप्ट करने के लिए एक अच्छा दृष्टिकोण यह पता लगाने में नाकाम रहने के। मुझे इसका प्रस्ताव देना होगा कि मैं Azure में होस्टिंग कर रहा हूं और मूल SQL एन्क्रिप्शन तक पहुंच नहीं है।मैं एंटिटी फ्रेमवर्क कोड में डेटा को एन्क्रिप्ट कैसे करूं?
SecurEntity से एक पृष्ठ लेते हुए, मैंने पूरी तरह से एक दृष्टिकोण लागू किया है जो इकाइयों की एन्क्रिप्टिंग/डिक्रिप्टिंग को संभालने के लिए सेव चेंज और ऑब्जेक्टमैटेरियलाइज्ड का उपयोग करता है, लेकिन परीक्षण में मैंने पाया है कि यह उपयोग करने के लिए बहुत अविश्वसनीय है।
public Value { get; set; }
[NotMapped]
public DecryptedValue
{
get { return Decrypt(this.Value); }
set { this.Value = Encrypt(value); }
}
यह सबसे निश्चित रूप से होगा:
public override int SaveChanges()
{
var pendingEntities = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
.Where(en => !en.IsRelationship).ToList();
foreach (var entry in pendingEntities) //Encrypt all pending changes
EncryptEntity(entry.Entity);
int result = base.SaveChanges();
foreach (var entry in pendingEntities) //Decrypt updated entities for continued use
DecryptEntity(entry.Entity);
return result;
}
void ObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
{
DecryptEntity(e.Entity);
}
मैं अन्य पदों कि मैन्युअल एन्क्रिप्ट/माध्यमिक गुण के माध्यम से डिक्रिप्ट, इसलिए की तरह देखा है:
यहाँ कार्यान्वयन के कुछ का एक नमूना है काम, लेकिन मुझे यह दृष्टिकोण आदर्श लगता है ... आदर्श से कम। इस दृष्टिकोण का उपयोग करते समय, सभी डेवलपर्स को सभी एन्क्रिप्टेड गुणों से गुज़रना पड़ता है ताकि वे यह पता लगा सकें कि वे किसका उपयोग कर सकते हैं।
सबसे आदर्श समाधान हो मेरे डेटा पहुंच के स्तर पर प्रत्येक मान की हो रही है/सेटिंग को ओवरराइड करने में सक्षम होना करने के लिए होगा। क्या इसे करने का कोई तरीका है? यदि नहीं, तो मैं एंटिटी फ्रेमवर्क के साथ डेटा एन्क्रिप्शन को कैसे कार्यान्वित कर सकता हूं - कोड पहले ताकि इसे बनाए रखना और काम करना आसान हो?
बारे में पता एक घातक सुरक्षा दोष है कि SecurEntity का वर्तमान क्रियान्वयन, जिसका अर्थ है कि प्रमाण पत्र से उत्पन्न कुंजी वास्तव में इस्तेमाल कभी नहीं किया है हो सकता है। एक त्वरित और गंदा ठीक लिए, https://securentity.codeplex.com/workitem/7376 –