如何在Windows Store应用程序中使用C#计算大文件的散列(MD5或SHA)

问题:

“如果尝试使用包含大文件的缓冲区的metod HashData(IBuffer)在Windows 8 Metro应用程序中计算md5或sha,将会收到OutOfMemoryException,因为缓冲区非常大(包含原始字节的副本文件)。”

解:

//NB: "file" is a "StorageFile" previously openedHashAlgorithmProvider md5 = Windows.Security.Cryptography.Core.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5); //in this example I use HashAlgorithmNames.Md5, you can replace it with HashAlgorithmName.Sha1, etc... HashAlgorithmProvider alg = Windows.Security.Cryptography.Core.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5); var stream = await file.OpenStreamForReadAsync(); var inputStream = stream.AsInputStream(); uint capacity = 100000000; Windows.Storage.Streams.Buffer buffer = new Windows.Storage.Streams.Buffer(capacity); var hash = alg.CreateHash(); while (true) { await inputStream.ReadAsync(buffer, capacity, InputStreamOptions.None); if (buffer.Length > 0) hash.Append(buffer); else break; } string hashText = CryptographicBuffer.EncodeToHexString(hash.GetValueAndReset()).ToUpper(); inputStream.Dispose(); stream.Dispose(); 

我希望这是有帮助的:)