派生した 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());