Вы используете любой производный HashAlgorithm для генерации хеша из байтового массива файла. Обычно используется MD5, но вы можете заменить это для любого из тех, которые предусмотрены в пространстве имен System.Security.Cryptography. Это работает для любого двоичного файла, а не только для изображений.
Многие сайты предоставляют MD5-хэши при загрузке файлов для проверки правильности загрузки файла. Например, в образе ISO CD / DVD могут отсутствовать байты, когда вы получили все это. После того, как вы загрузили файл, вы генерируете для него хеш и убедитесь, что он совпадает с тем, что на сайте написано. Если все сравнивается, у вас есть точная копия.
Я бы, вероятно, использовал что-то похожее на это:
public static class Helpers
{
//If you're running .NET 2.0 or lower, remove the 'this' keyword from the
//method signature as 2.0 doesn't support extension methods.
static string GetHashString(this byte[] bytes, HashAlgorithm cryptoProvider)
{
byte[] hash = cryptoProvider.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
}
Требуется:
using System.Security.Cryptography;
Звоните используя:
byte[] bytes = File.ReadAllBytes("FilePath");
string filehash = bytes.GetHashString(new MD5CryptoServiceProvider());
или если вы работаете в .NET 2.0 или ниже:
string filehash = Helpers.GetHashString(File.ReadAllBytes("FilePath"), new MD5CryptoServiceProvider());
Если вы решили использовать другой метод хеширования вместо MD5 для минимальной вероятности столкновений:
string filehash = bytes.GetHashString(new SHA1CryptoServiceProvider());
Таким образом, ваш метод has не привязан к конкретному провайдеру криптографии, и если вы решили, что хотите изменить того, какой провайдер криптографии вы используете, вы просто добавляете другой в параметр cryptoProvider.
Вы можете использовать любой другой класс хеширования, просто изменив поставщика услуг, которого вы передаете:
string md5Hash = bytes.GetHashString(new MD5CryptoServiceProvider());
string sha1Hash = bytes.GetHashString(new SHA1CryptoServiceProvider());
string sha256Hash = bytes.GetHashString(new SHA256CryptoServiceProvider());
string sha384Hash = bytes.GetHashString(new SHA384CryptoServiceProvider());
string sha512Hash = bytes.GetHashString(new SHA512CryptoServiceProvider());