簡體   English   中英

通過 Web API 代碼加密/解密字符串並將加密值存儲在 SQL 數據庫中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM