用户可以通过我的Web API服务将文件上传到Azure blob存储。 blob有MD5哈希值。
现在,另一个API可让用户下载之前上传的文件。 API返回:
return File(blobFile, MediaTypeNames.Application.Octet, file.FileName);
因此javascript客户端接收带有标题
的字节数组Content-Type:application / octet-stream
问题是js客户端如何验证下载文件的MD5是否与blob中的MD5匹配?
我尝试了一些在线MD5工具,他们不会给我与blob相同的MD5 ...
答案 0 :(得分:0)
我尝试了一些在线MD5工具,他们没有给我与blob相同的MD5。
在线MD5与blob MD5哈希有不同的算法。
下面的示例显示了客户端在检索完所有数据后如何validate the blobs MD5 hash。
// Validate MD5 Value
var md5Check = System.Security.Cryptography.MD5.Create();
md5Check.TransformBlock(retrievedBuffer, 0, retrievedBuffer.Length, null, 0);
md5Check.TransformFinalBlock(new byte[0], 0, 0);
// Get Hash Value
byte[] hashBytes = md5Check.Hash;
string hashVal = Convert.ToBase64String(hashBytes);
if (hashVal != blobRef.Properties.ContentMD5)
{
throw new InvalidDataException("MD5 Mismatch, Data is corrupted!");
}
此外,当您将blob上传到存储时,如果将 validate_content(bool) 参数设置为true,它将为每个blob块计算MD5哈希值。
存储服务使用已发送的哈希检查已到达的内容的哈希值。如果使用http而不是https,这对于检测线路上的位翻转非常有用,因为https(默认值)已经验证。请注意,此MD5哈希不与blob一起存储。