暴库也不怕!EF Core加密存储数据
生活随笔
收集整理的這篇文章主要介紹了
暴库也不怕!EF Core加密存储数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
針對某些數據字段要保存敏感數據的情況,比如銀行卡號,我們需要使用一種機制保證存儲到數據庫的數據是加密的,避免數據泄露風險,但是又能夠正常讀取出來顯示。
下面我們用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加密存储数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么应该用record来定义DTO
- 下一篇: 中国移动云能力中心 Iaas 产品部软件