Есть ли способ узнать значение хэша двух файлов? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть код Python, который генерирует значение хеш-функции двух файлов. Первый файл находится в c: \ windows \ system32 \ wscript.exe, а другой файл является клоном первого файла, расположенного в d: \ clone.exe.

код Python

import os
strcommand ='certutil -hashfile c:\windows\system32\wscript.exe md2'
p=os.popen(strcommand ).read()
print(str(p).split('\n')[1])

strcommand1='certutil -hashfile d:\clone.exe md2'
p=os.popen(strcommand1 ).read()
print(str(p).split('\n')[1])

Вывод

D:\pythonprogram>python clonefinder.py
4cef03889db08179b57035e4463a84d5
db1cefe474ce12678ea4d6c61dc42291

Но когда я использую команду, которая используетсяв Python в командной строке значения хеш-функции двух файлов одинаковы

Командная строка

D:\pythonprogram>certutil -hashfile c:\windows\system32\wscript.exe md2
MD2 hash of c:\windows\system32\wscript.exe:
db1cefe474ce12678ea4d6c61dc42291
CertUtil: -hashfile command completed successfully.

D:\pythonprogram>certutil -hashfile d:\clone.exe md2
MD2 hash of d:\clone.exe:
db1cefe474ce12678ea4d6c61dc42291
CertUtil: -hashfile command completed successfully.

Я хочу, чтобы значения хеш-функции были одинаковыми при выполнениипрограмма Python

любая помощь с этим?

1 Ответ

0 голосов
/ 10 октября 2019

Windows может быть довольно забавной операционной системой, и из-за ее возраста была добавлена ​​некоторая магия, чтобы позволить старому коду Windows по-прежнему работать с Windows 7/8/10 При некоторых обстоятельствах вы можете видеть разные версии файлов в каталогах, таких какC: \ Windows. В зависимости от ваших привилегий / в зависимости от того, запускаете ли вы 32-битное / 64-битное приложение. Я не знаю всех этих механизмов наизусть, но у меня уже было несколько неприятных сюрпризов.

Чтобы быть на 100% уверенным, что вы не выполняете команду certutil в двух разных средах. Я предлагаю следующее.

  1. открыть одно окно cmd.exe
  2. введите команды certutil из этого окна
  3. теперь вызывайте скрипт python также из того же окнас C:\Path_to_your_python\python.exe name_of_your_python_script.py используйте версию скрипта Python, в которой префикс строки regexp добавлен с r (r "regex")

Если у вас все еще разные результаты, проверьте, есть ли у вас 32-битная версияверсия или 64-битная версия Python установлен. C:\Path_to_your_python\python.exe -V

Если у вас 32-битная версия, я предлагаю установить 64-битную версию python для повторного тестирования.

...