![](/img/trans.png)
[英]Encrypt \ Decrypt an Integer where the encrypted value is an Integer
[英]Encrypt/Decrypt a string via web API code and store encrypted value in SQL database?
我需要符合 HIPAA 標准,並且這些要求表明 AES256 加密足以存儲敏感數據(名字、姓氏、SSN、ID、DOB、電話、VIN 等)。
我傾向於通過應用程序代碼進行加密,而不是使用內置支持加密字段的 MS SQL 或 MySQL。 避免 SQL 簽名證書過程、設置 MASTER KEY 等。
我使用 .NET 6 研究了 AES256 加密,大多數人警告不要使用 AES - CBC、ECB、EFB 或 CTS ......事實上,即使是微軟自己的文檔也建議不要使用 CBC,但也提供了一個沒有實際意義的 Aes 類代碼示例在這里? 在相同的執行范圍內加密然后解密......這在現實世界中幾乎永遠不會發生,在現實世界中,加密數據被保存,然后在以后的某個日期檢索和解密。
在搜索和/或報告(通配符)任何加密的數據時,顯然會對性能造成影響,我必須在將數據返回到請求源之前對其進行迭代(我有一個線程多核策略這里)。
使用應用程序代碼加密/解密 SQL 數據庫中的字段級數據的“當前”最佳實踐方法是什么? 除了全局應用程序密鑰之外,我是否需要分配一個字段來為要加密的每個字段保存一個隨機值?
如果要避免使用 AES .NET 6 加密庫,我還有哪些其他選擇?
你檢查過這個問題嗎? 具有 Sql Server 列級加密的實體框架我認為如果您使用 EF Core,這可能會很有用
您可以為此使用屬性。
1 - 創建一個屬性:
[AttributeUsage(AttributeTargets.All)]
public class EncryptData: System.Attribute
{
public EncryptData()
{
}
}
2 - 在任何地方使用它:
public class Person
{
[EncryptData]
public string Name {get;set;}
}
3 - 在插入時使用它:
public void Insert(T entity)
{
// your code
EncryptFields(entity,_context);
dbContext.SaveChanges();
}
`
public virtual T EncryptFields(T entity, MyDbContext dbContext)
{
MetadataTypeAttribute[] metadataTypes = entity.GetType().GetCustomAttributes(true).OfType<MetadataTypeAttribute>().ToArray();
foreach (MetadataTypeAttribute metadata in metadataTypes)
{
PropertyInfo[] properties = metadata.MetadataClassType.GetProperties();
foreach (PropertyInfo pi in properties)
{
if (Attribute.IsDefined(pi, typeof(DB.PartialEntites.EncryptData)))
{
int id = ((EncryptData)pi.GetCustomAttributes(true)[0]).id;
dbContext.Entry(entity).Property(pi.Name).CurrentValue = // YOUR ENCRYPTION ALGORITHM;
}
}
}
return entity;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.