zoukankan      html  css  js  c++  java
  • EntityFrameworkCore-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);
            }
        }

    现在,让我们增加几个User:

    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}");
    }

    可以看到输出正常

    但是数据库里保存的是加密后的数据

     

    原文链接:https://mp.weixin.qq.com/s/h78BfykDLUKAJE_9ClU5pg

    龙腾一族至尊龙骑
  • 相关阅读:
    python---自定义分页类
    python---正则中的(?P<name>group)
    学习windows编程 day6 之模拟记事本
    学习windows编程 day5 之按键消息
    some websit
    android/iphone/windows/linux声波通讯库
    无线点餐系统
    android实现弧形进度表盘效果
    与Sevice实现双向通信
    android code bbs for developer
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/15107455.html
Copyright © 2011-2022 走看看