MD5やSHA1を計算する方法は、「MD5やSHA1などでハッシュ値を計算する」で紹介しました。ファイルのハッシュ値を計算する方法もほぼ同じで、MD5CryptoServiceProviderクラスのComputeHashメソッドにバイト型配列ではなく、FileStreamを渡す点が異なるだけです(ファイルをすべて読みこんでバイト型配列を渡してもよいですが、ファイルのサイズが大きいとメモリを消費してしまいます)。
以下に例を示します。ここではTextBox1に入力されているファイルのMD5ハッシュ値を計算しています。
'MD5ハッシュ値を計算するファイル Dim fileName As String = TextBox1.Text 'ファイルを開く Dim fs As New System.IO.FileStream( _ fileName, _ System.IO.FileMode.Open, _ System.IO.FileAccess.Read, _ System.IO.FileShare.Read) 'MD5CryptoServiceProviderオブジェクトを作成 Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider() 'または、次のようにもできる 'Dim md5 As System.Security.Cryptography.MD5 = _ ' System.Security.Cryptography.MD5.Create() 'ハッシュ値を計算する Dim bs As Byte() = md5.ComputeHash(fs) 'リソースを解放する md5.Clear() 'ファイルを閉じる fs.Close() 'byte型配列を16進数の文字列に変換 Dim result As New System.Text.StringBuilder() For Each b As Byte In bs result.Append(b.ToString("x2")) Next 'ここの部分は次のようにもできる 'Dim result As String = BitConverter.ToString(bs).ToLower().Replace("-", "") '結果を表示 Console.WriteLine(result)
//MD5ハッシュ値を計算するファイル string fileName = TextBox1.Text; //ファイルを開く System.IO.FileStream fs = new System.IO.FileStream( fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); //MD5CryptoServiceProviderオブジェクトを作成 System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //または、次のようにもできる //System.Security.Cryptography.MD5 md5 = // System.Security.Cryptography.MD5.Create(); //ハッシュ値を計算する byte[] bs = md5.ComputeHash(fs); //リソースを解放する md5.Clear(); //ファイルを閉じる fs.Close(); //byte型配列を16進数の文字列に変換 System.Text.StringBuilder result = new System.Text.StringBuilder(); foreach (byte b in bs) { result.Append(b.ToString("x2")); } //ここの部分は次のようにもできる //string result = BitConverter.ToString(bs).ToLower().Replace("-",""); //結果を表示 Console.WriteLine(result);
SHA1ハッシュ値を計算するときは、次のようになります。
'SHA1ハッシュ値を計算するファイル Dim fileName As String = TextBox1.Text 'ファイルを開く Dim fs As New System.IO.FileStream(fileName, _ System.IO.FileMode.Open, System.IO.FileAccess.Read) 'SHA1CryptoServiceProviderオブジェクトを作成 Dim sha1 As New System.Security.Cryptography.SHA1CryptoServiceProvider() 'または、次のようにもできる 'Dim sha1 As System.Security.Cryptography.SHA1 = _ ' System.Security.Cryptography.SHA1.Create() 'ハッシュ値を計算する Dim bs As Byte() = sha1.ComputeHash(fs) 'リソースを解放する sha1.Clear() 'ファイルを閉じる fs.Close() 'byte型配列を16進数の文字列に変換 Dim result As New System.Text.StringBuilder() For Each b As Byte In bs result.Append(b.ToString("x2")) Next 'ここの部分は次のようにもできる 'Dim result As String = BitConverter.ToString(bs).ToLower().Replace("-", "") '結果を表示 Console.WriteLine(result)
//SHA1ハッシュ値を計算するファイル string fileName = TextBox1.Text; //ファイルを開く System.IO.FileStream fs = new System.IO.FileStream( fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); //SHA1CryptoServiceProviderオブジェクトを作成 System.Security.Cryptography.SHA1CryptoServiceProvider sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider(); //または、次のようにもできる //System.Security.Cryptography.SHA1 sha1 = // System.Security.Cryptography.SHA1.Create(); //ハッシュ値を計算する byte[] bs = sha1.ComputeHash(fs); //リソースを解放する sha1.Clear(); //ファイルを閉じる fs.Close(); //byte型配列を16進数の文字列に変換 System.Text.StringBuilder result = new System.Text.StringBuilder(); foreach (byte b in bs) { result.Append(b.ToString("x2")); } //ここの部分は次のようにもできる //string result = BitConverter.ToString(bs).ToLower().Replace("-",""); //結果を表示 Console.WriteLine(result);