如何从javascript客户端验证azure blob存储md5哈希?

如何从javascript客户端验证azure blob存储md5哈希?,javascript,md5,azure-storage-blobs,Javascript,Md5,Azure Storage Blobs,用户可以通过my web API服务将文件上载到Azure blob存储。这些blob有MD5散列 现在,另一个API允许用户下载以前上传的文件。 API返回: return File(blobFile, MediaTypeNames.Application.Octet, file.FileName); 因此javascript客户端接收一个带有头的字节数组 内容类型:应用程序/八位字节流 问题是js客户端如何验证下载文件的MD5是否与blob中的MD5匹配 我尝试了一些在线MD5工具,但他们

用户可以通过my web API服务将文件上载到Azure blob存储。这些blob有MD5散列

现在,另一个API允许用户下载以前上传的文件。 API返回:

return File(blobFile, MediaTypeNames.Application.Octet, file.FileName);
因此javascript客户端接收一个带有头的字节数组

内容类型:应用程序/八位字节流

问题是js客户端如何验证下载文件的MD5是否与blob中的MD5匹配

我尝试了一些在线MD5工具,但他们没有给我和blob相同的MD5

我尝试了一些在线MD5工具,但它们没有给我与blob相同的MD5

在线MD5与blob MD5散列有不同的算法

下面的示例显示了一旦检索到所有数据,客户机将如何运行

// 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上载到存储器时,如果将参数设置为true,它将为blob的每个块计算MD5哈希

存储服务检查已到达的内容的散列和已发送的散列。如果使用http而不是https,这对于检测线路上的位翻转非常有价值,因为https(默认)已经可以验证。请注意,此MD5哈希不是与blob一起存储的

我尝试了一些在线MD5工具,但它们没有给我与blob相同的MD5

在线MD5与blob MD5散列有不同的算法

下面的示例显示了一旦检索到所有数据,客户机将如何运行

// 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上载到存储器时,如果将参数设置为true,它将为blob的每个块计算MD5哈希

存储服务检查已到达的内容的散列和已发送的散列。如果使用http而不是https,这对于检测线路上的位翻转非常有价值,因为https(默认)已经可以验证。请注意,此MD5哈希不是与blob一起存储的