You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Entity Framework存储和检索加密数据未达预期

可能导致加密未生效的原因及解决方案

1. AES密钥与IV长度不符合规范

你当前使用的密钥和IV解码后长度仅为7字节,而AES算法有严格的长度要求:

  • 密钥长度必须是16(AES-128)、24(AES-192)或32(AES-256)字节
  • IV长度必须为16字节
    长度不匹配会导致加密逻辑无法正常工作,甚至静默失败。

修复方案:
生成符合规范的密钥和IV(生产环境需安全存储,避免硬编码):

// 示例:生成AES-256密钥和IV
var aes = Aes.Create();
aes.KeySize = 256;
var encryptionKeyBytes = aes.Key;
var encryptionIvBytes = aes.IV;
// 将字节转为Base64字符串保存,使用时再解码

2. 加密配置类未被正确应用

你的Encrptconfig类(注意拼写错误,建议修正为EncryptConfig)需要被显式添加到ModelBuilder中,否则属性加密规则不会生效。检查基类BaseDbContext的OnModelCreating方法是否自动加载了该配置,若没有则手动添加:

修复方案:
在ApplicationDbContext的OnModelCreating中补充配置应用逻辑:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.UseEncryption(_provider);
    // 显式应用加密属性配置
    modelBuilder.ApplyConfiguration(new Encrptconfig());
    base.OnModelCreating(modelBuilder);
}

3. OnModelCreating执行顺序冲突

如果base.OnModelCreating(modelBuilder)中包含覆盖配置的逻辑,可能会冲掉你设置的加密规则。需确保自定义加密配置的执行顺序优先于基类的覆盖逻辑:

修复方案:
调整执行顺序,优先应用自定义配置:

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

4. 加密库兼容性问题

你使用的IsEncrypted扩展方法来自SoftFluent.ComponentModel.DataAnnotations,需确认该库与当前EF版本、AesProvider实现是否兼容。版本不匹配可能导致加密注解无法被EF识别。

修复方案:

  • 核对库的官方文档,确认其支持的EF版本
  • 确保UseEncryption传入的_provider与IsEncrypted注解依赖的加密逻辑一致

5. 类名拼写错误导致配置失效

配置类名Encrptconfig缺少字母y,若在应用配置时写错类名,会直接导致配置不生效。建议修正类名为EncryptConfig,避免拼写失误。


内容的提问来源于stack exchange,提问作者Bharati Hattikal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:01:06