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

上传文件至Azure Blob Storage时SHA256哈希值不一致问题排查

可能的原因及解决方案

1. 分块上传时数据流不完整或被修改

第二种实现采用分块处理,如果分块逻辑中未将所有chunk的字节传入TransformBlock,或某块数据在读取/传输时被截断、篡改,最终哈希会与完整文件不符。

  • 检查分块循环逻辑:确保所有前端发送的chunkData都被正确读取并传入TransformBlock,无遗漏。
  • 验证分块字节长度:对比前端声明的分块大小与后端实际读取的chunkBytes长度,确认无丢字节情况。

2. Blob下载时的数据流问题(第一种实现)

从Blob下载到MemoryStream时,可能存在下载不完整或流操作错误:

  • 先确认下载的文件完整性:通过finalBlobClient.GetPropertiesAsync()获取Blob的实际大小,对比cfs.Length,确保两者一致。
  • 尝试直接从Blob流计算哈希,避免中间MemoryStream的潜在问题:
    using (SHA256 hash2 = SHA256.Create())
    using (var blobStream = await finalBlobClient.OpenReadAsync())
    {
        fh = BitConverter.ToString(hash2.ComputeHash(blobStream)).Replace("-", "").ToUpper();
    }
    

3. 前端上传的数据流与本地原文件不一致

在线工具计算的是本地文件哈希,但前端上传到Azure的数据流可能已被修改:

  • 检查前端上传逻辑:确认是否在上传前对文件进行了额外编码(如Base64转码后后端未正确解码)、是否添加了额外头部或修改了内容。
  • 对比本地文件与Blob内容:将Blob下载到本地,用二进制对比工具(如WinMerge的二进制模式)和原文件对比,确认两者完全一致。若不一致,说明上传过程中数据被篡改。

4. 哈希字符串格式化或算法细节问题

  • 确认在线工具使用的是SHA256算法(部分工具默认可能用其他哈希算法,需手动指定)。
  • 跳过字符串格式化,直接对比原始字节数组:将在线工具返回的哈希字符串转成字节数组,和代码中hash.Hash数组逐字节对比,排除字符串大小写、分隔符等格式差异导致的误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:20:17