![](/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.