Welcome

首页 / 软件开发 / C# / C#获取当前进程HASH的方法

C#获取当前进程HASH的方法2010-06-25 cnblogs SpadeQ基本原理

用C#实现在这个过程,我们需要进行下面几个步骤:

得到当前进程所对应的本地宿主文件;

打开这个文件流;

确定hash算法,计算文件流的hash;

将hash结果转换为我们熟悉的字符串表现形式。

下面就分别就这几个方面来进行解释。

获取宿主文件路径

在System.Diagnostics命名空间下,有个Process类,MSDN的描述是"提供对本地和远程进程的访问并使您能够启动和停止本地系统进程"。该类有一个静态方法GetCurrentProcess(),利用它我们可以获取当前进程。

Process类的MainModule属性包含了该进程所关联的主模块,换句话说也就是宿主文件,而MainModule的FileName属性,就是该宿主文件的完整路径。

Process currProcess = Process.GetCurrentProcess();
string filePath = currProcess.MainModule.FileName;
更多的关于获取当前路径和程序集的方法,可以参见C#获取当前路径的方法集合。

打开文件流

这个本来没什么好说的,直接用FileStream打开就行,但切记要将FileMode和FileAccess都设置成只读,否则可能会导致运行时错误。

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// hash 算法
fs.Close();
}
确定hash算法

这里我们用MD5算法为例。

.NET框架为提供了System.Security.Cryptography命名空间,我们使用其中的MD5类来进行hash计算。该类的下面几个成员需要我们注意:

Create()静态方法:生成一个MD5类的实例。

ComputeHash()方法:计算输入数据的哈希值。

在这里要注意,ComputeHash()所能接受的参数可以是Stream也可以是byte[],为了方便起见我们用前者。它的返回值却只能是byte[],长度固定为16。

MD5 algorithm = MD5.Create();
byte[] hashData = algorithm.ComputeHash(fs);