|開発環境|Microsoft Visual C# 2010 Express (SP1)| |実行環境|Microsoft Windows XP Home Edition (SP3)| |プロジェクトの種類|Windows フォーム アプリケーション| |プロジェクト名|HashChecker| プロパティ |Form1 |AcceptButton |Check| | |AllowDrop |True| | |MaximizeBox |False| | |Text |Hash Checker| |Label |Text |File Path| |TextBox|(Name) |FilePath| | |Enabled |False| |Label |Text |MD5| |TextBox|(Name) |MD5Out| | |Enabled |False| |TextBox|(Name) |MD5In| |Label |Text |SHA-1| |TextBox|(Name) |SHA1Out| | |Enabled |False| |TextBox|(Name) |SHA1In| |Label |Text |File Size| |TextBox|(Name) |FileSizeOut| | |Enabled |False| |TextBox|(Name) |FileSizeIn| |Button |(Name) |Check| | |Text |Check| #ref(HashChecker.png) 参考 -[[ファイルのMD5やSHA1などでハッシュ値を計算する: .NET Tips: C#, VB.NET>http://dobon.net/vb/dotnet/string/filemd5.html]] Form1.cs #highlight(c#){{ using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.Windows.Forms; namespace HashChecker { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void Form1_DragDrop(object sender, DragEventArgs e) { string[] filePathArray = (string[])e.Data.GetData(DataFormats.FileDrop, false); string filePath = filePathArray[0]; FilePath.Text = filePath; // File Size FileInfo fi = new FileInfo(filePath); FileSizeOut.Text = fi.Length.ToString(); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); // MD5 using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { byte[] bs = md5.ComputeHash(fs); StringBuilder result = new StringBuilder(); foreach (byte b in bs) { result.Append(b.ToString("x2")); } MD5Out.Text = result.ToString(); } fs.Seek(0, SeekOrigin.Begin); // SHA-1 using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) { byte[] bs = sha1.ComputeHash(fs); StringBuilder result = new StringBuilder(); foreach (byte b in bs) { result.Append(b.ToString("x2")); } SHA1Out.Text = result.ToString(); } fs.Close(); } private void Check_Click(object sender, EventArgs e) { StringBuilder message = new StringBuilder(); int error = 0; // File Size message.Append("File Size: "); string fileSize = FileSizeIn.Text.Replace(",", ""); if (FileSizeOut.Text == fileSize) { message.Append("OK"); } else { message.Append("NG"); error++; } // MD5 message.Append("\nMD5: "); if (String.Compare(MD5Out.Text, MD5In.Text, true) == 0) { message.Append("OK"); } else { message.Append("NG"); error++; } // SHA-1 message.Append("\nSHA-1: "); if (String.Compare(SHA1Out.Text, SHA1In.Text, true) == 0) { message.Append("OK"); } else { message.Append("NG"); error++; } MessageBoxIcon icon; switch (error) { case 0: icon = MessageBoxIcon.Information; break; case 3: icon = MessageBoxIcon.Error; break; default: icon = MessageBoxIcon.Warning; break; } MessageBox.Show(message.ToString(), "Hash Checker", MessageBoxButtons.OK, icon); } } } }}