文字列のMD5を求める - C#

文字列のMD5を求めるコードを紹介します。

概要

C#ではMD5を求めるライブラリがあらかじめ用意されているため、ライブラリのメソッドを呼び出すだけでMD5を計算できます。MD5を求める場合は、System.Security.CryptographyのMD5CryptoServiceProvider クラスを用います。また、C#ではString型はUnicodeで定義されているため、文字列のMD5を求める場合には文字コードの変換をしてbyte[]配列に変換したものをMD5CryptoServiceProvider.ComputeHash()メソッドの入力とします。

プログラム例

textBox1に入力された文字列のMD5を計算し、求めたMD5文字列をtextBox2に表示します。

UI

下図のUIを作成します。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace CalcHash
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string source = textBox1.Text;
      byte[] sourcebyte = System.Text.Encoding.GetEncoding("SHIFT_JIS").GetBytes(source);

      MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
      //or//MD5 md5 = MD5.Create()

      byte[] md5byte = md5.ComputeHash(sourcebyte);

      StringBuilder result = new StringBuilder();
      for (int i=0; i < md5byte.Length; i++) {
        result.Append(md5byte[i].ToString("x2"));
      }
      //または
      /*
      foreach (byte b in md5byte) {
        result.Append(b.ToString("x2"));
      }
      */ 
      //もしくは
      //string result = BitConverter.ToString(md5byte).ToLower().Replace("-","");

      textBox2.Text=result.ToString();
    }
  }
}

解説

  string source = textBox1.Text;
  byte[] sourcebyte = System.Text.Encoding.GetEncoding("SHIFT_JIS").GetBytes(source);
textBox1に入力された値をsource変数に格納し、SHIFT-JISのEncoding オブジェクトのGetBytesメソッドを呼び出し、バイト配列に変換します。sourcebyte 変数には、テキストボックスに入力された文字列がSHIFT-JISにエンコードされた値が代入されます。

  MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
MD5CryptoServiceProvider のインスタンスを作成します。

  byte[] md5byte = md5.ComputeHash(sourcebyte);

  StringBuilder result = new StringBuilder();
  for (int i=0; i < md5byte.Length; i++) {
    result.Append(md5byte[i].ToString("x2"));
  }
MD5CryptoServiceProvider オブジェクト(md5)のComputeHashメソッドを呼び出し、ハッシュを求めます。ComputeHashメソッドの引数にハッシュを求める元データのbyte配列を与えます。計算されたハッシュ値がmd5byte変数に代入されます。
次に、ループでmd5byteのバイト配列を1文字ずつ、16進文字列に変換します。(79 であれば "4F" の文字列に変換します。)、変換した文字列はAppendでStringBuilderオブジェクトのresultに追加されます。

  textBox2.Text=result.ToString();
result の内容をテキストボックスに表示します。

実行結果

上記のコードを実行します。下図のウィンドウが表示されます。


上部のテキストボックスに、MD5のハッシュを求めたい文字列を入力します。入力後[MD5]ボタンをクリックします。


MD5の値が下部のテキストボックスに表示されます。

このページのキーワード
  • 文字列のMD5を取得する
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-08-12
iPentec all rights reserverd.