C# C中的SHA1 form.exe文件#

C# C中的SHA1 form.exe文件#,c#,exe,sha1,C#,Exe,Sha1,我希望有人能帮助我读取C#中的exe文件,并从中创建SHA1哈希。我曾尝试使用StreamReader和BinaryReader读取可执行文件。然后使用内置的SHA1算法,我尝试创建一个散列,但没有成功。StreamReader的算法结果为“AEUj+PPO5QDHOEDAH3P65N3S=”,BinaryReader的算法结果为“rWXzn/CoLLPBWqMCE4qcE3XmUKw=”。有人能帮我从exe文件中获取SHA1哈希吗?Thx 顺便说一句,对不起我的英语;) 不要使用试图将不透明二

我希望有人能帮助我读取C#中的exe文件,并从中创建SHA1哈希。我曾尝试使用StreamReader和BinaryReader读取可执行文件。然后使用内置的SHA1算法,我尝试创建一个散列,但没有成功。StreamReader的算法结果为“AEUj+PPO5QDHOEDAH3P65N3S=”,BinaryReader的算法结果为“rWXzn/CoLLPBWqMCE4qcE3XmUKw=”。有人能帮我从exe文件中获取SHA1哈希吗?Thx


顺便说一句,对不起我的英语;)

不要使用试图将不透明二进制数据转换为文本数据的
StreamReader
。。。exe文件不是文本数据

只需使用
FileStream
并调用
ComputeHash

byte[] hash;
using (Stream stream = File.OpenRead(filename))
{
    hash = SHA1.Create().ComputeHash(stream);
}
string base64Hash = Convert.ToBase64String(hash);

不要使用
StreamReader
-它将尝试将不透明的二进制数据转换为文本数据。。。exe文件不是文本数据

只需使用
FileStream
并调用
ComputeHash

byte[] hash;
using (Stream stream = File.OpenRead(filename))
{
    hash = SHA1.Create().ComputeHash(stream);
}
string base64Hash = Convert.ToBase64String(hash);


StreamReader
实现
TextReader
因此我们不在二进制世界:-)

StreamReader
实现
TextReader
因此我们不在二进制世界:-)

使用File.ReadAllBytes(路径)读取所有字节。然后使用字节[]作为SHA1函数的输入。@Mikael:我认为没有理由将整个文件读取到内存中,因为它可以很容易地以流式方式进行散列。@Jon,我会亲自进行流式处理,除非已知数据可以很容易地放入内存。@Mikael:没错-那么为什么要调用ReadAllBytes?:)我试图为用户做一个快速/简单的评论,并指出使用字节/二进制数据的方向。但是流式代码同样简短,所以我要为此向-1道歉。但询问者可能不太清楚流实际上使用字节。字节和字符串之间的差异是提问者遗漏的。如果我在做笔记时手头有我的VS(总是有助于测试VS中的任何答案),我就不会做笔记,而是以与您相同的方式回答。使用File.ReadAllBytes(path)读取所有字节。然后使用字节[]作为SHA1函数的输入。@Mikael:我认为没有理由将整个文件读取到内存中,因为它可以很容易地以流式方式进行散列。@Jon,我会亲自进行流式处理,除非已知数据可以很容易地放入内存。@Mikael:没错-那么为什么要调用ReadAllBytes?:)我试图为用户做一个快速/简单的评论,并指出使用字节/二进制数据的方向。但是流式代码同样简短,所以我要为此向-1道歉。但询问者可能不太清楚流实际上使用字节。字节和字符串之间的差异是提问者遗漏的。如果我在做笔记时手头有我的VS(总是有助于测试VS中的任何答案),我就不会做笔记,而是以与你相同的方式回答。我想得到任何正在运行的进程的哈希值,这不是很耗时吗?在这种情况下,有没有更快的散列计算方法?非常感谢advance@Hossein:你所说的过程是什么意思?你是说原始的可执行文件吗?您正在考虑的可执行文件有多大?可以接受哪种性能?谢谢,在windows机器上运行进程。它们大多是基于系统的进程,但也有其他进程,如oracle或msSQLServer进程和服务。实际上,我正在努力确保目前只有少数几个白名单进程正在运行。目前,我在c#中每1毫秒汇集一次进程列表,并将它们与白名单进行比较。WMI很慢,也不太可靠,因为我可能会错过一些进程事件。关于性能方面,如果可能的话,我需要在这方面做一些快速的工作。@Hossein:每毫秒轮询一次似乎是个坏主意——而且你肯定不想经常对所有进程的文件进行哈希运算。如果你看到一个文件有了新的文件名或者文件的大小发生了变化,你就不能对其进行散列吗?文件名可以改变,使其看起来像任何合法的进程。大小也不会更好,因为任何恶意软件都可以通过伪造其属性(包括其大小)来试图使其看起来像合法的进程。散列将为我提供一个很好的发现方法恶意软件或不需要的应用程序。我想获取任何正在运行的进程的哈希值,这不是很耗时吗?在这种情况下,有没有更快的散列计算方法?非常感谢advance@Hossein:你所说的过程是什么意思?你是说原始的可执行文件吗?您正在考虑的可执行文件有多大?可以接受哪种性能?谢谢,在windows机器上运行进程。它们大多是基于系统的进程,但也有其他进程,如oracle或msSQLServer进程和服务。实际上,我正在努力确保目前只有少数几个白名单进程正在运行。目前,我在c#中每1毫秒汇集一次进程列表,并将它们与白名单进行比较。WMI很慢,也不太可靠,因为我可能会错过一些进程事件。关于性能方面,如果可能的话,我需要在这方面做一些快速的工作。@Hossein:每毫秒轮询一次似乎是个坏主意——而且你肯定不想经常对所有进程的文件进行哈希运算。如果你看到一个文件有了新的文件名或者文件的大小发生了变化,你就不能对其进行散列吗?文件名可以改变,使其看起来像任何合法的进程。大小也不会更好,因为任何恶意软件都可以通过伪造其属性(包括其大小)来试图使其看起来像合法的进程。散列将为我提供一个很好的发现方法恶意软件或不需要的应用程序。