c#

位置:IT落伍者 >> c# >> 浏览文章

C#中如何产生与比较哈希值


发布日期:2020年08月04日
 
C#中如何产生与比较哈希值

借助于SystemSecurityCryptography命名空间的密码资源将非常容易产生与比较哈希值因为所有的哈希函数都接收类型为 Byte() 的输入因此可能需要将初始数据转换成一个字节数组才能够为它产生哈希值欲为一个字符串值建立一个哈希值请依下列步骤进行

使用Using语句导入SystemSystemSecuritySystemSecurityCryptographic与SystemText命名空间这样一来您才不需要于程序代码中编写一长串的完整名称

using SystemDrawing;

using SystemText;

using SystemWindowsForms;

using SystemSecurityCryptography;

声明一个字符串变量来持有您的初始数据并声明两个字节数组(未定义大小)来持有初始字节与所产生出的哈希值

string sSourceData;

byte[] tmpSource;

byte[] tmpHash;

使用 GetBytes() 方法(它是SystemTextASCIIEncoding类的一部分)将您的初始字符串转换至一个字节数组中

sSourceData = MySourceData;

// 根据初始数据来建立一个字节数组

tmpSource = ASCIIEncodingASCIIGetBytes(sSourceData);

通过调用MDCryptoServiceProvider类的实例的ComputeHash方法来为您的初始数据计算出MD哈希值请注意欲计算出另外一个哈希值您必须建立该类的另外一个实例

// 根据初始数据计算出哈希值

tmpHash = new MDCryptoServiceProvider()ComputeHash(tmpSource);

tmpHash字节数组现在会获取您初始数据的哈希值(位值=字节)将此显示或储存成一个十六进制字符串通常会非常有用下列程序代码即是进行此项处理

lblHashResultText = sSourceData + \n + ByteArrayToString(tmpHash) + \n;

private string ByteArrayToString(byte[] arrInput)

{

StringBuilder sOutput = new StringBuilder(arrInputLength);

for (int i = ; i < arrInputLength; i++)

{

sOutputAppend(arrInput[i]ToString(X));

}

return sOutputToString();

}

通过上述程序代码您便能够为初始数据产生出哈希值并以一个十六进制字符串来表示接下来

们要继续说明如何比较两个哈希值

为初始数据建立哈希值的目的之一就是要提供一种方式来检查数据是否被更改过或是不通过实际的值来比较两个值不论是哪一种情况您都需要比较两个哈希值然而如果两个哈希值皆已储存成十六进制字符串则比较哈希值的操作将会更加简易当然也有可能两个哈希值都是以字节数组的形式存在

后续步骤的程序代码将延续先前步骤的程序代码以便示范如何比较两个字节数组

请在建立一个十六进制字符串的地方紧接着根据新的初始数据建立一个新的哈希值

sSourceData = NotMySourceData;

tmpSource = ASCIIEncodingASCIIGetBytes(sSourceData);

byte[] tmpNewHash;

bool bEqual = false;

tmpNewHash = new MDCryptoServiceProvider()ComputeHash(tmpSource);

比较两个字节数组最直接了当的方式就是通过循环依序处理数组以便一一比较两数组中的每一个元素如果有任何元素不相同或是两数组的大小不相同则表示两值并不相等

if(tmpNewHashLength == tmpHashLength)

{

int i = ;

while((i < tmpNewHashLength) & & (tmpNewHash[i] == tmpHash[i]))

{

i += ;

}

if(i == tmpNewHashLength)

{

bEqual = true;

}

}

if (bEqual)

{

lblHashResultText += 这两个哈希值是相同的;

}

else

{

lblHashResultText += 这两个哈希值并不相同;

}

保存与运行您的项目以便查看根据第一个哈希值所建立的十六进制字符串并确认新的哈希值是否

与初始的相同

完整的程序代码已编写在程序范例CH_DemoFormcs的Load事件处理函数中请自行参考之所示则是执行结果thisstylewidth=; onmousewheel = javascript:return big(this) src=/files/uploadimg//jpg>图

上一篇:用C#调外部Ping命令获取网络连接情况

下一篇:.NET上根据字符串动态创建控件