使用实体框架存储和检索加密数据未按预期工作

问题描述 投票:0回答:1

我尝试使用具有以下配置的实体框架来存储和检索加密数据。然而,数据似乎没有按预期以加密形式存储。

这是我的代码:

public class Encrptconfig : IEntityTypeConfiguration<Lrb.Domain.Entities.DataEncryption>
{
    public void Configure(EntityTypeBuilder<Lrb.Domain.Entities.DataEncryption> builder)
    {
        builder.IsMultiTenant();
        builder.Property(e => e.Name)
            .IsEncrypted(SoftFluent.ComponentModel.DataAnnotations.StorageFormat.Base64)
            .IsRequired();
    }
}

public class DataEncryption : AuditableEntity, IAggregateRoot
{
    public string? Name { get; set; }
    public string? Email { get; set; }
}

public class ApplicationDbContext : BaseDbContext
{
    private readonly IEncryptionProvider _provider;


    public ApplicationDbContext()

    {
        var encryptionKeyBytes = Convert.FromBase64String("TGVhZHJhdA==");
        var encryptionIvBytes = Convert.FromBase64String("TGVhZHJhdA==");

        _provider = new AesProvider(encryptionKeyBytes, encryptionIvBytes);
    }

    public DbSet<DataEncryption> DataEncryption => Set<DataEncryption>();

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.UseEncryption(_provider);
        base.OnModelCreating(modelBuilder);
    }
}

问题:

我希望当我将数据保存到 DataEncryption 表时,Name 属性应该以加密格式存储,当我检索它时,我应该得到解密的值。然而,这并没有发生。

有人知道可能出了什么问题吗?任何帮助将不胜感激!`

c#
1个回答
0
投票

base.OnModelCreating(modelBuilder)
之前调用
modelBuilder.UseEncryption(_provider)
以确保首先应用实体配置。如文档

中的示例所述,需要此顺序才能使加密正常工作
© www.soinside.com 2019 - 2024. All rights reserved.