I have a number of columns in a database that are encrypted. I can pull the record from the database using EF Core 6, I can pass the record to a decryption routine, but I need to update the record with the unencrypted values.
Here is the decrypt routine:
public Subject DecryptSubjects(Subject decryptSubject, List<string> EncryptedColumns)
{
if (decryptSubject == null)
{
return null;
}
var decryptedProperty = decryptSubject.GetType().GetProperty("Decrypted");
if (decryptedProperty != null)
{
bool? value = (bool?)decryptedProperty.GetValue(decryptSubject, null);
if (value != null)
{
if (value == true)
{
return decryptSubject;
}
}
}
foreach (string name in EncryptedColumns)
{
var property = decryptSubject.GetType().GetProperty(name);
if (property != null)
{
var value = property.GetValue(decryptSubject, null);
if (value != null)
{
property.SetValue(decryptSubject, Decrypt(value.ToString()), null);
}
}
}
if (decryptedProperty != null)
{
decryptedProperty.SetValue(decryptSubject, true, null);
}
return decryptSubject;
}
This is returning the decrypted values just fine.
Here is the call to this routine:
var subjects = context.Subjects.ToList();
foreach (var subject in subjects)
{
// decrypt each subject and then update them in the database
var decryptedSubject = encrypt.DecryptSubjects(subject, subjectCols);
}
Once I get the decryptedSubject back, I want to update the record in the database. Is there a better way than setting each property on the subject object to the decrypted values in decryptedSubject likes this:
...
subject.FirstName = decrytpedSubject.FirstName;
subject.LastName = decrytedSubject.LastName;
...