我尝试使用具有以下配置的实体框架来存储和检索加密数据。然而,数据似乎没有按预期以加密形式存储。
这是我的代码:
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 属性应该以加密格式存储,当我检索它时,我应该得到解密的值。然而,这并没有发生。
有人知道可能出了什么问题吗?任何帮助将不胜感激!`
在
base.OnModelCreating(modelBuilder)
之前调用 modelBuilder.UseEncryption(_provider)
以确保首先应用实体配置。如文档中的示例所述,需要此顺序才能使加密正常工作