Чи вплине зміна імені файлу на хеш MD5 файлу?


Відповіді:


31

Тільки в тому випадку, якщо ім’я файлу було включено до розрахунку хешу. наприклад, у псевдокоді:

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

створить два окремих хеші.


20
Задається питання про інструмент CLI "md5sum", а не про алгоритм загалом.
jameshfisher

206

Ні, хеш стосується лише вмісту файлу. Ви можете побачити це у джереліmd5sum та його реалізації MD5 . Ви також можете перевірити це, якщо у вас є доступ до md5sum:

$ echo "some arbitrary content" > file1
$ cp file1 file2
$ md5sum file1
f0007cbddd79de02179de7de12bec4e6  file1
$ md5sum file2
f0007cbddd79de02179de7de12bec4e6  file2
$

18
Це має бути відповіддю. Питання з тегом "md5sum".
ingyhere

3
Дякую за пряму відповідь.
Едді Б,

Ідеально! У мене не було Linux, щоб спробувати це. Але у мене є Stackoverflow :)
Faizan

Вам не потрібно використовувати Linux, щоб це знати. Ви можете отримати той самий результат на MacOSX або Windows.
Олександр Мулатіньо

1
На випадок, якщо хтось шукає еквівалент Windows, такий як @alexandreMulatinho, згаданий: замініть md5sum на fciv, а cp на copy, і він працює так само. Якщо після цього ви введете підсистему windows для Linux, хеші md5sum збігаються з fciv.
Джейк Стівенс-Хаас,

4

У Linux, що використовує файлову систему EXT, цього не буде, оскільки ім'я файлу не зберігається у файлі, воно зберігається у записі каталогу (дентрі), в якому живе файл, де inode файлу потім відображається на ім'я. Зміна імені файлу не вплине на його md5sum в Linux. У Windows я не можу бути впевненим.


3
Також файлові системи Windows не зберігають ім'я файлу у файлі. Прямий порт md5sumповинен поводитися, як очікувалося.
MauganRa

1

Якщо хеш обчислюється із вмісту файлу, він не повинен.


4
Задається питання про інструмент CLI "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")

З цього випливає, що, незважаючи на те, що метадані файлу змінені, хеш залишається незмінним до тих пір, поки вміст файлу не залишиться незмінним.

Сподіваюся, це допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.