文字列の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の値が下部のテキストボックスに表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用