gpt4 book ai didi

c# - Azure 存储的文件与本地文件具有不同的 MD5 校验和(是同一文件)

转载 作者:行者123 更新时间:2023-11-30 21:38:54 25 4
gpt4 key购买 nike

我正在使用 can 服务将文件上传到 Azure 存储服务,因此我想使用 MD5 校验和检查文件的完整性,因此首先我从函数获取校验和。

public static string GetMD5HashFromFile(Stream stream)
{
using (var md5 = MD5.Create())
{
return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", string.Empty);
}
}

对于我正在使用的测试文件,我得到:1dffc245282f4e0a45a9584fe90f12f2,当我使用像this这样的在线工具时,我得到了相同的结果。 .

然后,我将文件上传到 Azure 并从我的代码中获取它,如下所示:(为了避免包含验证,我们假设文件和目录确实存在。)

public bool CompareCheckSum(string fileName, string checksum)
{
this.storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("MyConnectionString"));
this.fileClient = this.storageAccount.CreateCloudFileClient();
this.shareReference = this.fileClient.GetShareReference(CloudStorageFileShareSettings.StorageFileShareName);
this.rootDir = this.shareReference.GetRootDirectoryReference();
this.directoryReference = this.rootDir.GetDirectoryReference("MyDirectory");
this.fileReference = this.directoryReference.GetFileReference(fileName);

Stream stream = new MemoryStream();
this.fileReference.DownloadToStream(stream);
string azureFileCheckSum = GetMD5HashFromFile(stream);

return azureFileCheckSum.ToLower() == checksum.ToLower();
}

我还尝试使用不同的过程来获取校验和,如下所示:

public bool CompareCheckSum(string fileName, string checksum)
{
this.storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("MyConnectionString"));
this.fileClient = this.storageAccount.CreateCloudFileClient();
this.shareReference = this.fileClient.GetShareReference(CloudStorageFileShareSettings.StorageFileShareName);
this.rootDir = this.shareReference.GetRootDirectoryReference();
this.directoryReference =
this.rootDir.GetDirectoryReference("MyDirectory");
this.fileReference = this.directoryReference.GetFileReference(fileName);

this.fileReference.FetchAttributes();
string azureFileCheckSum = this.fileReference.Metadata["md5B64"];

return azureFileCheckSum.ToLower() == checksum.ToLower();
}

最后,对于 azureFileCheckSum,我得到:d41d8cd98f00b204e9800998ecf8427e 不确定我是否做错了什么,或者当我将文件上传到 ftp 时是否发生了变化...

最佳答案

在调用md5.ComputeHash(stream)之前,您需要将流的位置重置到开头。

stream.Position = 0;

当然,如果流类型不支持查找,这将失败并出现 NotSupportedException,但在您的情况下它应该可以工作。

关于c# - Azure 存储的文件与本地文件具有不同的 MD5 校验和(是同一文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45516064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com