【发布时间】:2015-12-27 16:53:04
【问题描述】:
我正在尝试针对二进制文件计算 Python 中的 SHA1 哈希值,以便以后进行比较。为了确保一切正常,我使用了几种方法来检查我的结果的有效性。而且,我很高兴我做到了。 Powershell 和 Python 返回不同的值。 7zip 的 SHA1 函数与 Powershell 的结果一致,Microsoft 的 FCIV 与 Python 的结果一致。
Python:
import hashlib
with open("C:\\Windows\\system32\\wbem\\wmiutils.dll", "rb") as f:
print(hashlib.sha1(f.read()).hexdigest())
Powershell:
PS C:\> Get-FileHash C:\Windows\System32\wbem\wmiutils.dll -Algorithm SHA1
结果:
Python: d25f5b57d3265843ed3a0e7b6681462e048b29a9
Powershell: B8C757BA70F6B145AD191A1B09C225FBA2BD55FB
编辑:针对 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-system-and-registry
【问题讨论】:
-
我不记得 Windows 是如何做到这一点的,但会不会是 Python 是 32 位进程而您获得的是 32 位版本的 wmiutils.dll?在另一个不是 dll 且不在 system32 中的文件上测试它。
-
成功了!启动一个 32 位 Powershell 窗口并返回:D25F5B57D3265843ED3A0E7B6681462E048B29A9
-
这也可能是由于 python/FCIV 和 7zip/Powershell 处理字符串到位转换的方式不同:参见Is SHA-1 Hash Always the Same
-
好吧,现在我有另一个问题:为什么在二进制文件上的 GNU/sha1sum 和 Python 之间会得到不同的 SHA1 哈希?
-
现在我想知道是否有办法确定文件系统重定向器返回的实际文件。这感觉就像兔子洞的开始......
标签: python powershell x86 64-bit