Berechnen von Hash (MD5 oder SHA) einer großen Datei mit C # in der Windows Store App [geschlossen]

PROBLEM:

Msgstr "" "Wenn Sie versuchen, md5 oder sha in einer Windows 8 - Metro - App unter Verwendung der Metodaten HashData (IBuffer) mit einem Puffer zu berechnen, der eine große Datei enthält, erhalten Sie die OutOfMemoryException, da der Puffer sehr groß ist (eine Kopie in Byte des Originals enthält Datei)."

LÖSUNG:

//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();

Ich hoffe das ist hilfreich :)

Antworten auf die Frage(0)

Ihre Antwort auf die Frage