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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM