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
相关产品推荐
相关产品推荐

