7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
|
|
1 | |
Вычисление MD5 суммы папки22.08.2013, 08:16. Показов 10472. Ответов 18
Метки нет (Все метки)
0
|
22.08.2013, 08:16 | |
Ответы с готовыми решениями:
18
Генерация MD5 хеш суммы файла Непонятка с функцией md5 нахождения хэш - суммы Вычисление суммы четных и суммы нечетных чисел в одномерном массиве Ввод элементов массива с клавиатуры, вычисление суммы по формуле, нахождение максимальной суммы |
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
22.08.2013, 11:37 | 3 |
Мммммм.... Вообще-то MD5 (и вообще любой) хэш однозначно вычисляется только для последовательности байтов.
Так вот: что считать такой "последовательностью байтов" для папки, содержащей в общем случае неограниченное количество файлов и вложенных подпапок (каждая из которых является в общем случае точно такой же папкой)?
1
|
Ушел с форума
|
|
22.08.2013, 12:09 | 5 |
Интересный вопрос.
Допустим, хэш папки равен хэшу всех файлов, находящихся в ней. Тогда вопросы: в каком порядке считать хэши этих файлов ? Учитывать ли имена файлов и папок (например, структура и файловый контент папки может совпадать байт в байт, но при этом иметь разные имена файлов и каталогов - в этом случае хэш папки должен быть одинаковым или разным) ? Что, если в папке будут reparse points - как с них снимать хэш ? Что, если во время вычисления хэша в папке произойдут изменения ? Нужно ли учитывать атрибуты файлов (системный, только для чтения, и т.п.) ? Что, если файлы будут содержать альтернативные NTFS-потоки - их считать или нет ? Как считать хэши пустых файлов ? Как реагировать на одинаковые имена, различающиеся только регистром (Paris и PARIS) ? И так далее. В общем, не такая уж и очевидная задача...
1
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
22.08.2013, 12:16 | 6 |
Во! Именно. Коллега Убежденный просто более развернуто и подробно задал ключевой вопрос.
Сам по себе подсчет MD5 (да и любого другого) хеша от последовательности байтов - тривиальная задача, но вот подсчет того же самого для папки - задача весьма нетривиальная....
1
|
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
|
|
23.08.2013, 04:41 [ТС] | 7 |
Т.е. самым оптимальным и верным вариантом будет вычислить значение хэша для каждого файла в папке и подпапках, и потом их сложить вместе?
Тогда напрашивается два вопроса: 1) Как это можно реализовать WinApi функциями, или есть более простые библиотеки для работы с директориями? 2) Как вместе можно сложить хэши md5? Или же, есть еще один вариант, это архивировать папку, и получить хэш уже .rar или .zip архива, мне кажется этот вариант более сложным.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
23.08.2013, 10:16 | 8 |
При наличии инструмента — ничего сложного
Код
$ tar -c folder | md5sum 9b9f07661b450531858834d8623e58f2 - $ tar -c folder | md5sum 9b9f07661b450531858834d8623e58f2 - $ touch folder/abc $ tar -c folder | md5sum 5a4f0912e008835182921a094ce6a97b - $ touch folder/abc $ tar -c folder | md5sum 977854686e431948fe2bce9849c45a29 -
0
|
23.08.2013, 11:06 | 9 |
ТС нечетко сформулировал вопрос, под "хеш папки" можно понимать:
а. хеш самого файла папки б. хеш содержащихся в ней файлов в. хеш содержащихся в ней и в ее подпапках файлов наверное, это не все варианты, но даже по ним надо уточнять способ расчета: - если хеш по файлу папки, то как учитывать удаленные записи? - если по содержимому файлов, то в каком порядке их брать? - что если у файла в папке изменится дата/время или имя, но содержимое не изменится?
0
|
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
|
|
24.08.2013, 07:53 [ТС] | 10 |
Дата и время, насколько я знаю, не влияют на изменение хэша, хэш вычисляется по бинарному файлу.
Добавлено через 24 секунды Не понял, можете по конкретнее?
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
24.08.2013, 09:51 | 11 |
Ну это я про сложность архивирования. При наличии архиватора организовать подсчёт суммы никаких проблем нет. Друге дело, что изменение времени модификации файла (вторая команда touch) будет приводить к изменению суммы. Более того, даже время модификации самого каталога folder будет влиять на сумму.
Если сумма должна зависеть только от содержимого файлов, то придётся обеспечить порядок обхода директорий в соответствии с каким-то порядком сортировки. Или же хэши отдельных файлов комбинировать коммутативно, чтобы от порядка обхода результат не зависел.
0
|
76 / 76 / 2
Регистрация: 03.05.2012
Сообщений: 161
|
|
24.08.2013, 10:25 | 12 |
Delvox, прислушайтесь таки к Убежденному. Он только часть потенциальных проблем озвучил, но и их за глаза хватит. Либо делайте список файлов с указанием хеша для каждого из них, либо архивируйте папку и считайте хеш для получившегося файла-архива.
0
|
637 / 415 / 27
Регистрация: 03.11.2009
Сообщений: 1,855
|
|
24.08.2013, 19:26 | 13 |
0
|
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
|
|
25.08.2013, 07:46 [ТС] | 14 |
0
|
46 / 48 / 2
Регистрация: 16.08.2013
Сообщений: 257
|
|
25.08.2013, 11:21 | 15 |
Вот именно)) мы же когда берём хеш файла не вычисляем его с датами. легче всего рекурсивно пройтись по файлам папки в сортировке 0-9A-zА-я - и либо сложить хеш суммы в одну строку и вывести окончательный хеш, либо просто потоком из всех файлов вычислить сразу один хеш (разумеется вставляя названия файлов). Ну конечно для самых умных можно провести работу напрямую с файловой системой
0
|
637 / 415 / 27
Регистрация: 03.11.2009
Сообщений: 1,855
|
|
25.08.2013, 20:43 | 16 |
ну возможно можно сделать так
список критически важных файлов при запуске программы проверяете их и запускаете программу через какое то время можете до проверять остальное это игра и вы пишете апдейтер?
0
|
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
|
|
26.08.2013, 02:52 [ТС] | 17 |
0
|
637 / 415 / 27
Регистрация: 03.11.2009
Сообщений: 1,855
|
|
26.08.2013, 12:07 | 18 |
ну так полно игр, трудно глянуть как там реализовано?
уже пару дней потратили на выяснения хеша папки, когда можно было сделать пересчетом файлов как везде
0
|
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
|
|
26.08.2013, 12:15 [ТС] | 19 |
0
|
26.08.2013, 12:15 | |
26.08.2013, 12:15 | |
Помогаю со студенческими работами здесь
19
md5 папки Проверка md5 папки Рассчитать MD5 для папки MD5 хеш сумма папки с файлами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |