DOBON.NET

ファイルのMD5やSHA1などでハッシュ値を計算する

MD5やSHA1を計算する方法は、「MD5やSHA1などでハッシュ値を計算する」で紹介しました。ファイルのハッシュ値を計算する方法もほぼ同じで、MD5CryptoServiceProviderクラスのComputeHashメソッドにバイト型配列ではなく、FileStreamを渡す点が異なるだけです(ファイルをすべて読みこんでバイト型配列を渡してもよいですが、ファイルのサイズが大きいとメモリを消費してしまいます)。

MD5ハッシュ値を計算する例

以下に例を示します。ここではTextBox1に入力されているファイルのMD5ハッシュ値を計算しています。

VB.NET
コードを隠すコードを選択
'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)
C#
コードを隠すコードを選択
//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ハッシュ値を計算するときは、次のようになります。

VB.NET
コードを隠すコードを選択
'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)
C#
コードを隠すコードを選択
//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);
  • 履歴:
  • 2013/6/27 Clearメソッドを呼び出すようにした。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。