1. 程式人生 > 其它 >EntityFrameworkCore-EF Core加密儲存資料

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

龍騰一族至尊龍騎