「VCS/HashChecker」の編集履歴(バックアップ)一覧に戻る

VCS/HashChecker - (2013/04/24 (水) 13:50:23) のソース

|開発環境|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);
        }
    }
}
}}