通过 MD5CryptoServiceProvider类的ComputeHash方法得到hash表的值,通过转换元字符串为16进制,通过比较两字符串的生产的hash表的值来判断是否相等。
只是一个窗体程序,只要在窗体装载load事件中写入代码即可。
给出主要源代码如下: 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 HashtableWin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string sScoucreDate = "MySourceDate";
byte[] tmpSoucre = ASCIIEncoding.ASCII.GetBytes(sScoucreDate);
byte[] tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSoucre);
lblHashtableResult.Text = sScoucreDate + "/n" + ByteArrayToString(tmpHash) + "/n";
CompareTwoHashValue(ref sScoucreDate, ref tmpSoucre, tmpHash);
}
private void CompareTwoHashValue(ref string sScoucreDate, ref byte[] tmpSoucre, byte[] tmpHash)
{
sScoucreDate = "NotMySourceData";
bool bEqual = false;
tmpSoucre = ASCIIEncoding.ASCII.GetBytes(sScoucreDate);
byte[] tmpNewHash = new MD5CryptoServiceProvider().ComputeHash(tmpSoucre);
lblHashtableResult.Text += sScoucreDate + "/n" + ByteArrayToString(tmpHash) + "/n";
if (tmpNewHash.Length == tmpHash.Length)
{
int i = 0;
while ((i < tmpNewHash.Length) & (tmpNewHash[i] == tmpHash[i]))
{
i++;
}
if (i == tmpNewHash.Length)
{
bEqual = true;
}
}
if (bEqual)
{
lblHashtableResult.Text += "这两个哈希值是相同的";
}
else
{
lblHashtableResult.Text += "这两个哈希值是不同的";
}
}
private string ByteArrayToString(Byte[] arrInput)
{
StringBuilder sOutPut = new StringBuilder(arrInput.Length);
for (int i = 0; i < arrInput.Length; i++)
{
sOutPut.Append(arrInput[i].ToString("x2"));
}
return sOutPut.ToString();
}
}
}