繁体   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