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

下面我们用MySql演示如何操作。

Demo

创建一个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}");
}

可以看到输出正常

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

结论

使用这种方式的好处在于,可以实现统一的数据库数据加解密规则,不需要单独在仓储中处理了,方便快速实现业务。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

暴库也不怕!EF Core加密存储数据相关推荐

  1. EF Core 批量写入数据使用整理_EF Core批量插入数据(一)

    一.EF Core 批量添加数据 问题详解 AddRange() 问题整理: 1.对于批量写入数据,每次几万条情况 使用 Add() 方法不合理 2.使用AddRange() 每次批量写入数据也要有个 ...

  2. mysql多租户schema复制,Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作...

    前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...

  3. EF Core中高效批量删除、更新数据的Zack.EFCore.Batch发布三个新特性

    Zack.EFCore.Batch是一个支持在Entity Framework Core中高效删除和更新数据的开源库.我们知道,EF Core中不支持高效的删除和更新数据,所有的更新和操作都是逐条数据 ...

  4. ef 多个左联接查询_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记...

    2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Ass ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记

    2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Ass ...

  6. mysql加密存储敏感数据

    项目中涉及到用户敏感信息,比如手机号.身份证号码等,应该以密文形式存储在数据库中,本文例子演示如何利用mysql的加解密函数对数据进行加密存储.解密读取.以及过滤查询. 下面以在表"test ...

  7. .NET 5中的EF Core 5数据迁移:在单独的库中并自动部署

    目录 1.简介 2.先决条件 3.使用Dotnet CLI创建解决方案和项目框架 4.在DataAcess中创建模型和数据上下文 5.在WebApp中启动数据库 6.添加数据迁移功能 7.更改数据库模 ...

  8. EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

    小故事 在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此) 小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘嫂知道小刘的品性,知道他发工资的日子,也 ...

  9. .net core Entity Framework 与 EF Core

    重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...

最新文章

  1. Bayer Pattern to RGB
  2. 模板 - 数据结构 - ST表 + 二维ST表
  3. 保持边缘平滑的图像(曲率)
  4. 为@RequestMapping标注的方法扩展其传入参数
  5. POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
  6. IOS--Tableview选中一个cell
  7. HTML5为输入框添加语音输入功能
  8. mongodb记录存储管理
  9. 能ping通,TCP就一定能连通吗?
  10. 学习Python的第一天
  11. java 获取视频时间_java 获取视频时间
  12. SpringBoot整合阿里云视频点播
  13. 服务器ie安全增强关闭后还是显示,怎么关掉ie浏览器的增强安全配置
  14. 时间复杂度(超详解+例题)
  15. 【数据结构】二叉树 (Binary Tree)
  16. 2021高考枣强中学成绩查询,枣强中学,衡水系的重点高中,成绩斐然
  17. 由点金系统想到的——如何剥开系统美丽的外衣
  18. bat一键修复打印机一直卡在正在删除提示
  19. C语言 输出二维数组任一行任一列元素的值
  20. win7计算机安全管理,简单四步让你的Win7电脑系统变得更安全

热门文章

  1. 如果让我做一回产品经理。。。
  2. 华为网络设备上的常用安全技术(一)
  3. routine tortoisesvn operations-1
  4. Windows Server 2008 R2 之三十故障转移群集(二)
  5. 斑马无线打印服务器,如何设置斑马打印机无线WiFi
  6. error记录 | 不能将参数 1 从“const char [5]”转换为“LPCTSTR
  7. adb错误 - INSTALL_FAILED_NO_MATCHING_ABIS
  8. 自学python(一)
  9. linux最常用的20条命令
  10. 代码Review发现问题