Повлияет ли изменение имени файла на MD5-хеш файла?

89

Повлияет ли изменение имени файла на MD5-хэш файла?

Майкл Шницер
источник

Ответы:

31

Только если имя файла было включено в расчет хэша. например, в псевдокоде:

$hash1 = md5(contents of file);
$hash2 = md5(name of file + contents of file);

создаст два отдельных хэша.

Марк Б
источник
20
Вопрос касается инструмента командной строки «md5sum», а не алгоритма в целом.
jameshfisher
206

Нет, хеш - это только содержимое файла. Вы можете увидеть это в исходном кодеmd5sum и в его реализации MD5 . Вы также можете проверить это, если у вас есть доступ к md5sum:

$ echo "some arbitrary content" > file1
$ cp file1 file2
$ md5sum file1
f0007cbddd79de02179de7de12bec4e6  file1
$ md5sum file2
f0007cbddd79de02179de7de12bec4e6  file2
$
Jameshfisher
источник
18
Это должен быть ответ. Вопрос помечен как «md5sum».
ingyhere 05
3
Спасибо за прямой ответ.
Eddie B
Отлично! У меня не было Linux, чтобы попробовать это. Но у меня есть Stackoverflow :)
Файзан
Вам не нужно использовать Linux, чтобы знать это. Вы можете добиться того же результата в MacOSX или Windows.
Александр Мулатиньо
1
В случае, если кто-то ищет эквивалент Windows, например, упомянутый @alexandreMulatinho: замените md5sum на fciv и cp на копию, и он будет работать точно так же. Если вы затем войдете в подсистему Windows для Linux, хеши md5sum будут соответствовать хешам fciv.
Джейк Стивенс-Хаас
4

В Linux, использующей файловую систему EXT, этого не произойдет, поскольку имя файла не хранится в файле, оно сохраняется в записи каталога (dentry), в которой находится файл, где индексный дескриптор файла затем сопоставляется с именем. Изменение имени файла не повлияет на его md5sum в Linux. В Windows не могу быть уверенным.

GL2014
источник
3
Также файловые системы Windows не хранят имя файла в файле. Простой порт md5sumдолжен вести себя так, как ожидалось.
MauganRa
1

Если хеш вычисляется из содержимого файла, этого не должно быть.

Тед Хопп
источник
4
Вопрос касается инструмента командной строки «md5sum», а не алгоритма в целом.
jameshfisher
0

В ESXi (точно ESXi 5.5) md5sum для одного и того же контента, но разные имена файлов разные. Это наводит меня на мысль, что файловая структура VMFS-5 также включает имя файла. Если нас не беспокоит имя файла, есть ли способ проверить только md5sum содержимого файла? Я не видел никаких вариантов. Какие-либо предложения?

Венфа Назир
источник
О каких файлах вы говорите? Образы виртуальных дисков ( .vmdk)? В заголовках vmdk есть данные, которые могут зависеть от имени и расположения файла. Как вы переименовали файлы в своем тесте? --- В остальном с точки зрения содержимого файла VMFS является нормальной файловой системой, и содержимое файлов не зависит напрямую от их имен.
pabouk
-1

В ответ на комментарий https://stackoverflow.com/a/14360831/9392847 :

Это работает только в том случае, если один файл является копией другого файла, но не тогда, когда два разных файла с разными именами генерируются с точно таким же содержимым. Я пробовал это:

nancy@nancy:~/Documents$ md5sum /home/nancy/Documents/1test.pdf
c5a445b7186dfb220ea79d2001acf3f1  /home/nancy/Documents/1test.pdf
nancy@nancy:~/Documents$ md5sum /home/nancy/Documents/2test.pdf
cefa063abf0c0a9e80b2b75e70100836  /home/nancy/Documents/2test.pdf

Оба файла 1test.pdf и 2test.pdf созданы с помощью программы gimp . Один и тот же контент экспортируется дважды с двумя разными именами.

Нэнси
источник
Это означает, что содержимое файлов не совсем то же самое ... Программа должна экспортировать разные метаданные в каждый из них
Милни
-2

1.md5 рассчитывается на основе двоичного содержимого ФАЙЛА. 2. Имя файла, последнее изменение и т. Д. Все является метаданными. Md5 на самом деле не полагается на метаданные. Я проверил это с помощью следующих шагов, позволяет работать с метаданными "последнего изменения" i) Я создал файл с именем "a.txt", добавил некоторый контент и создал хэш, скажем, хеш "xyz" ii) Затем у меня есть просто добавил пробел в файл и снова вычислил хэш, скажем, он вернул "abc" iii) Я только что удалил свое изменение на шаге (ii), при повторном вычислении хеша я получил начальный хеш ("xyz")

Это означает, что даже если метаданные файла изменены, хеш остается неизменным до тех пор, пока содержимое файла не останется неизменным.

Надеюсь, это поможет.

Коричневый
источник