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

使用SQL脚本解密EF Core加密数据返回Null的问题求助

EF Core AesProvider加密后SQL解密返回Null的解决办法

核心问题分析

你的SQL脚本存在两个致命错误:密钥处理逻辑和EF Core的加密逻辑不匹配,以及错误生成了新的IV用于解密。

1. 密钥处理错误

EF Core代码中,实际传入AesProvider的密钥是原keyBase转成Base64字符串后的UTF8字节数组,而你的SQL直接对原keyBase执行UNHEX,完全不符合加密时的密钥推导逻辑。

2. IV使用错误

AesProvider默认会将IV(16字节)嵌入到加密后的数据头部,解密时必须使用这个嵌入的IV,而不是随机生成新的IV。

修正后的SQL脚本

SET @keyBase = 'xxxxxxxxxxxxxxxxxxxxxxxx';
SET @encrypted_data = 'some encrypted data from column';

-- 模拟EF Core的密钥推导逻辑:先把keyBase转成Base64字符串,再转成UTF8字节数组
SET @key_str = TO_BASE64(@keyBase);
SET @key = CAST(@key_str AS BINARY);

-- 从加密数据中提取IV(前16字节)和实际密文
SET @encrypted_binary = FROM_BASE64(@encrypted_data);
SET @iv = LEFT(@encrypted_binary, 16);
SET @ciphertext = SUBSTRING(@encrypted_binary, 17);

-- 使用正确的密钥和IV解密
SET @decrypted_data = AES_DECRYPT(@ciphertext, @key, @iv);

-- 返回解密结果
SELECT CAST(@decrypted_data AS CHAR) AS decrypted_data;

额外验证点

  • 确保数据库的字符集是UTF8,否则CAST(@key_str AS BINARY)得到的字节数组会和EF Core中Encoding.UTF8.GetBytes(key)不一致。
  • 确认AesProvider使用的是ECB以外的模式(默认是CBC),且填充方式和MySQL的AES_DECRYPT一致(默认PKCS#7),这部分AesProvider和MySQL默认是匹配的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:15:04