需要计算c#中存储在Azure存储中的文件的SHA1哈希值

时间:2016-07-15 15:52:57

标签: azure azure-storage azure-storage-blobs

我将大文件(1-10 GB)上传到azure存储,需要在上传时计算文件的SHA1哈希值。我是否能够在服务器上计算SHA1而无需下载文件?

2 个答案:

答案 0 :(得分:2)

Azure Blob Storage在添加blob时会自动支持blob的MD5哈希计算,请参阅Get Blob Properties下面的内容。

  

内容-MD5

     

如果已为blob设置了Content-MD5标头,则会返回此响应标头,以便客户端可以检查邮件内容的完整性。   在版本2012-02-12及更新版本中,即使Put Blob请求不包含MD5标头,Put Blob也会设置块blob的MD5值。

因此,如果没有特殊需要,没有必要为blob计算SHA1哈希值。

作为参考,这里是一个计算SHA1哈希而不下载存储在存储中的blob的示例。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("<StorageAccountConnectionString>");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("<container-name>");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("<blob-name>");
MemoryStream memStream = new MemoryStream();
await blockBlob.DownloadToStreamAsync(memoryStream);
using (memStream)
{
    using (SHA1Managed sha = new SHA1Managed())
    {
        byte[] checksum = sha.ComputeHash(memStream);
    }
}

答案 1 :(得分:0)

将一些帖子合并在一起,我创建了以下伪造的流以从Blob计算MD5。当然,使用伪造数据流的好处是您不必将整个文件保存在内存中,因此不需要。对我来说效果很好,尽管可能需要一点点抛光。

python3