Как получить хеш файла или строки
В Windows Phone Silverlight это делалось немного иначе, теперь же, нас постепенно ведут к единому стандарту:
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage;
using Windows.Storage.Streams;
// ...
public async Task<string> NewSHA256(StorageFile file)
{
IBuffer buffFile = await FileIO.ReadBufferAsync(file);
HashAlgorithmProvider hashProvider = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256);
IBuffer buffHash = hashProvider.HashData(buffFile);
return CryptographicBuffer.EncodeToHexString(buffHash);
}
Пример для строки и прочую справочную информацию, как всегда, смотрим на msdn.
HashAlgorithmNames, нам гарантирует получение и других хешей, аналогичным образом (md5, sha512 и т.д). При желании добавляем параметром функции название алгоритма.
Держим в голове, что при считывании в буфер слишком больших файлов мы можем столкнуться с проблемами.
Решить данные вопросы можно, к примеру, так:
public static async Task<string> GetHash(StorageFile file, string alg)
{
HashAlgorithmProvider hashProvider = HashAlgorithmProvider.OpenAlgorithm(alg);
CryptographicHash cryptoHash = hashProvider.CreateHash();
using (var stream = await file.OpenStreamForReadAsync())
{
int count;
var buffer = new byte[4096];
while ((count = stream.Read(buffer, 0, 4096)) > 0)
{
cryptoHash.Append(buffer.AsBuffer(0, count));
}
}
return CryptographicBuffer.EncodeToHexString(cryptoHash.GetValueAndReset());
}