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

ASP.NET Core使用AES解密时出现部分数据丢失问题如何解决

ASP.NET Core AES加解密末尾数据丢失问题解决

根因分析

你的加密代码存在参数传值错误:
transform.TransformFinalBlock 方法的第三个参数代表需要加密的字节数组长度,但你传入的是字符串的字符数 text.Length。
由于你的CSV内容包含é、á这类多字节UTF-8字符,单个字符在UTF-8编码下会占用2个字节,Encoding.UTF8.GetBytes(text) 生成的字节数组实际长度远大于字符串的字符计数,导致加密时直接截断了字节数组末尾的部分内容,解密后自然丢失末尾数据。

修复方案

修改加密方法中加密转换的代码即可:

原错误代码

byte[] encrypted_bytes = transform.TransformFinalBlock(Encoding.UTF8.GetBytes(text) , 0, text.Length);

修正后代码

// 先拿到明文的完整字节数组,取实际字节长度作为加密参数
byte[] plainBytes = Encoding.UTF8.GetBytes(text);
byte[] encrypted_bytes = transform.TransformFinalBlock(plainBytes, 0, plainBytes.Length);

额外优化建议

  • 读取上传文件时显式指定编码,避免服务端默认编码不一致导致读取乱码:将new StreamReader(uploadFile.OpenReadStream())修改为new StreamReader(uploadFile.OpenReadStream(), Encoding.UTF8)
  • 大文件处理建议使用CryptoStream直接包装文件流操作,无需全量加载到内存,性能更高
  • AES加解密建议显式指定Key和IV,不要依赖加密对象的默认生成逻辑,避免不同实例的IV不一致导致解密失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:42:02