EF Core加密存储数据

针对某些数据字段要保存敏感数据的情况,比如银行卡号,登录密码,需要使用一种机制保证存储到数据库的数据是加密的,避免数据泄露风险,但是又能够正常读取出来显示。

示例【mysql】:
创建一个ConsoleApp1,然后引用下列NuGet包:

  • EntityFrameworkCore.DataEncryption
  • Pomelo.EntityFrameworkCore.MySql
    数据表User,包含3个字段:
  • Id 主键
  • Name 姓名
  • BankCard 银行账户
    创建User类,在BankCard上我们加了EncryptedAttribute,表示这个字段需要加密:
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Encrypted]
    public string BankCard { get; set; }
}

创建DefaultDbContext,在构造函数创建IEncryptionProvider实例,
并在OnModelCreating方法中UseEncryption:

public class DefaultDbContext: DbContext
    {
        private readonly byte[] _encryptionKey = ...;
        private readonly byte[] _encryptionIV = ...;
        private readonly IEncryptionProvider _provider;
        public DefaultDbContext()
        {
            this._provider = new AesProvider(this._encryptionKey, this._encryptionIV);
        }

        public DbSet<User> User { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.UseEncryption(this._provider);
            base.OnModelCreating(modelBuilder);
        }
    }

使用

DefaultDbContext context = new DefaultDbContext();

User zhangsan = new User { Id = 1, Name = "张三", BankCard = "12345" };
User lisi = new User { Id = 2, Name = "李四", BankCard = "67890" };
context.User.AddRange(zhangsan, lisi);
context.SaveChanges();

var users = context.User.ToList();
foreach (var user in users)
{
    Console.WriteLine($"{user.Id} {user.Name} {user.BankCard}");
}

输出
【控制台】
在这里插入图片描述

【数据库】
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值