当前位置: 首页 > 知识库问答 >
问题:

通过web API代码加密/解密字符串并将加密值存储在SQL数据库中?

严峰
2023-03-14

我需要符合HIPAA标准,这些要求表明AES256加密足以存储敏感数据(名字,姓氏,SSN,ID,DOB,电话,VIN等)。

我倾向于通过应用程序代码加密,而不是使用MSSQL或MySQL内置的加密字段支持。避免SQL签名证书过程,设置MASTER KEY等。

我研究AES256加密使用。NET 6,大多数人被警告不要使用AES - CBC、ECB、EFB或CTS...事实上,即使是微软自己的文档也建议不要使用CBC,而是提供一个Aes类代码示例,在这里没有实际意义?在同一执行范围内加密然后解密...这在现实世界中几乎不会发生,在现实世界中,加密的数据会被保存,然后在以后的某个时间被检索和解密。

当搜索和/或报告(通配符)任何加密的数据时,性能显然会受到影响,在将数据返回给请求源之前,我必须遍历这些数据(这里我有一个线程化的多核策略)。

使用应用程序代码加密/解密SQL数据库中字段级数据的“当前”最佳实践方法是什么?除了全局应用程序密钥之外,我还需要分配一个字段来为我要加密的每个字段保存一个随机值吗?

如果要避免使用AES.NET6加密库,我还有什么其他选择?

共有1个答案

应煌
2023-03-14

你检查过这个问题吗?具有 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;
    }
 类似资料:
  • 本文向大家介绍ASP.NET web.config中 数据库连接字符串加密解密,包括了ASP.NET web.config中 数据库连接字符串加密解密的使用技巧和注意事项,需要的朋友参考一下 虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容 加密: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50

  • 问题内容: 我正在通过Apache和Node.js服务器之间的不安全连接发送数据。我需要在PHP中加密数据并在Node.js中解密。我花了2天的时间使它正常工作,但是我只设法使消息签名正常工作,没有加密。我尝试将AES128-CBC,AES256-CBC,DES,AES128,AES256作为算法传递,但是效果不佳。 我在PHP中尝试过: 在Node.js中: 而且除了错误的解密数据外,我还会得到

  • 问题内容: 尝试使用javax.crypto库对字符串进行加密并将其存储在数据库(Oracle)中。稍后我将需要解密此字符串,因此我需要双向算法。 问题是数据库似乎不接受该方法创建的某些加密字符。我们介于将数据库迁移到新服务器之间。旧数据库使用US7ASCII字符集,而新数据库使用AL32UTF8。当我将加密的字符串放入数据库中时,数据库只是将它们转换为US7ASCII数据库中的问号(?)。它似乎

  • 所以我使用下面的代码来加密/解密可以存储在设备首选项中的字符串值,但我知道需要添加一个加密/解密ArrayList的方法,该方法也可以存储在首选项中(所以我猜加密需要将arraylist转换为字符串,然后解密需要将该字符串转换回arraylist)。由于我对Android/Java非常陌生,因此我很难弄清楚如何做到这一点,因此任何帮助都将不胜感激。

  • 如有任何帮助,我们将不胜感激!

  • 我感兴趣的是构建一个个人使用的小应用程序,它将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但不会存储解密的版本。 它不一定要是超级duper安全的,但我想使用一个当前未中断的算法。 理想情况下我可以做一些 生成编码字符串,以及类似于 以后再解码。 到目前为止,我已经看到了以下内容:http://bitwiseshiftleft.github.io/sjcl