Jak obliczyć Hash (MD5 lub SHA) dużego pliku z C # w aplikacji Windows Store [zamknięte]
PROBLEM:
„Jeśli spróbujesz obliczyć md5 lub sha w aplikacji Metro w systemie Windows 8 przy użyciu metody HashData (IBuffer) z buforem zawierającym duży plik, otrzymasz wyjątek OutOfMemoryException, ponieważ bufor jest bardzo duży (zawiera kopię w bajcie oryginału plik)."
ROZWIĄZANIE:
//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();
Mam nadzieję, że to jest pomocne :)