为什么我在系统DLL上的Powershell和32bit-Python之间获得不同的SHA1哈希?

mus*_*ere 9 python powershell 64-bit x86

我正在尝试在Python中针对二进制文件计算SHA1哈希值,以便以后进行比较.为了确保工作正常,我使用了几种方法来检查结果的有效性.而且,我很高兴我做到了.Powershell和Python返回不同的值.7zip的SHA1功能与Powershell的结果一致,微软的FCIV也同意Python的结果.

蟒蛇:

import hashlib
with open("C:\\Windows\\system32\\wbem\\wmiutils.dll", "rb") as f:
     print(hashlib.sha1(f.read()).hexdigest())
Run Code Online (Sandbox Code Playgroud)

电源外壳:

PS C:\> Get-FileHash C:\Windows\System32\wbem\wmiutils.dll -Algorithm SHA1
Run Code Online (Sandbox Code Playgroud)

结果:

Python: d25f5b57d3265843ed3a0e7b6681462e048b29a9
Powershell: B8C757BA70F6B145AD191A1B09C225FBA2BD55FB
Run Code Online (Sandbox Code Playgroud)

编辑:针对system32 dll的32位Python和64位Powershell.那就是问题所在.我有一些功课要做,但基本上,32位和64位应用程序接收不同的文件,因此,不同的哈希结果.我启动了64位python并对dll和64位PowerShell进程运行完全相同的代码.将这两个进程作为32位运行时收到一致的结果.

EDIT2:找到了解释这个问题的资源.至少它帮助我了解了正在发生的事情:https: //www.sepago.com/blog/2008/04/20/windows-x64-all-the-same-yet-very-different-part-7-file-系统和注册表

MK.*_*MK. 6

这种情况正在发生,因为您正在运行32位版本的Python并访问系统DLL - Windows神奇地将您重定向到dbit的32位版本,而PowerShell作为64位进程运行并且看到了64位版本的DLL.

我不确定我是否很高兴我知道这一点或对此感到难过.