Это из-за 32-разрядных приложений, работающих на 64-битной Windows, и того, как Windows обрабатывает папку System32 для этих программ.
Это также заставляло меня гать на некоторое время, потому что я не мог на всю жизнь понять, почему определенные файлы в System32 (а именно .dlls и .exes) возвращают разные хэши в зависимости от того, с чем я их проверил.
Используя HxD и Firefox, чтобы загрузить файл, чтобы проверить его хэш, у меня были разные результаты по сравнению с использованием хэш-проверки QTTabBar, которая работает внутри explorer.exe.
Но если бы я скопировал один из этих файлов в другое место, я бы затем получил одинаковые результаты во всех программах.
Между тем, HxD показывал разные длины файлов для скопированного файла по сравнению с тем, который был в System32, и хотя оба показали аналогичное распределение байтов, также были значительные различия.
Но потом я подумал попробовать то же самое на другую папку, и, наконец, взломали, с небольшой помощью от Wikipedia:
Операционная система использует % SystemRoot% \ System32 для его 64-битная библиотека и исполняемые файлы. Это сделано для отстающих соображений совместимости, так как многие устаревшие приложения жестко запрограммированы на , используя этот путь. При выполнении 32-разрядных приложений WoW64 прозрачно перенаправляет 32-разрядные библиотеки DLL на % SystemRoot% \ SysWOW64, который содержит 32-разрядные библиотеки и исполняемые файлы.
32-разрядные приложения обычно не знают , что они работают в 64-разрядной операционной системе.32-разрядные приложения могут получить доступ к % SystemRoot% \ System32 через псевдо % SystemRoot% \ Sysnative.
Поскольку HxD и Firefox (и большинство других браузеров) все 32-разрядные приложения, при загрузке файла в них, Windows на самом деле прозрачно перенаправлять их в файл с тем же именем в папке SysWOW64 (предположительно если вы запустили 64-битный браузер, вы не столкнетесь с этой проблемой).
Аналогично, когда вы копируете файл из System32 в другое место, explorer.exe, будучи 64-битным процессом, копирует исходный файл System32, а не эквивалент SysWOW64 (смутно названный).
Так как вики государств, если ввести %SystemRoot%\Sysnative
в путь открытого диалога файла в вашем 32-битное приложение, он должен загрузить файл из папки реального System32, и дать вам правильный результат.
И если вы проверяете файлы в каталоге SysWOW64, все файлы должны возвращать одинаковые хэши независимо от того, с кем вы их открываете.
Дальнейшее чтение:
пожалуйста, вы можете повторно проверить ваш вопрос? Я сделал то, что вы предложили, и у меня все еще есть те же значения хэша –
Файл notepad.exe присутствует в C: \ Windows \ System32 \ notepad.exe Версия файла: 6.1.7600.16385 Размер файла: 193536 байтов Хэш-значение (MD5): d378bffb70923139d6a4f546864aa61c notepad.exe (я скопировал файл на рабочий стол) C: \ Users \ имя_пользователя \ Версия рабочего стола \ notepad.exe файла: 6.1.7600.16385 Размер файла: 193536 байт Hash Value (MD5): f2c7bb8acc97f92e987a2d4087d021b1 Используется MD5file.com для генерации значений хэша – jain
@ArturPeniche Как вы вычисляете хэш-значение? – jain