Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/56: Рейтинг темы: голосов - 56, средняя оценка - 4.71
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
1

Вычисление MD5 суммы папки

22.08.2013, 08:16. Показов 10472. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Каким самым простым образом можно вычислить MD5 хеш папки?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2013, 08:16
Ответы с готовыми решениями:

Генерация MD5 хеш суммы файла
Сколько не пробовал, неправильно генерируется хеш! :( Ведь файл это набор символов. Потому я...

Непонятка с функцией md5 нахождения хэш - суммы
Здравствуйте! Решил по чуть-чуть двигаться в сторону более высоких материй, в частности...

Вычисление суммы четных и суммы нечетных чисел в одномерном массиве
1) Написать программу для вычисления суммы четных и суммы нечетных чисел в одномерном массиве!

Ввод элементов массива с клавиатуры, вычисление суммы по формуле, нахождение максимальной суммы
Помогите дополнить код. Нужно, чтоб элементы массива вводились с клавиатуры. Выводилось на экран...

18
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
22.08.2013, 09:29 2
Посмотреть посчитанный? Винда же вроде считает какой-то хеш, его можно посмотреть в свойствах папки. Наверняка есть API для получения готового хеша.
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
22.08.2013, 11:37 3
Мммммм.... Вообще-то MD5 (и вообще любой) хэш однозначно вычисляется только для последовательности байтов.

Так вот: что считать такой "последовательностью байтов" для папки, содержащей в общем случае неограниченное количество файлов и вложенных подпапок (каждая из которых является в общем случае точно такой же папкой)?
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
22.08.2013, 11:45 4
Папка - это же по сути просто файл. Его хеш и считать. Вложенность на результат не повлияет.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.08.2013, 12:09 5
Цитата Сообщение от Delvox Посмотреть сообщение
Каким самым простым образом можно вычислить MD5 хеш папки?
Интересный вопрос.
Допустим, хэш папки равен хэшу всех файлов, находящихся в ней.
Тогда вопросы: в каком порядке считать хэши этих файлов ?
Учитывать ли имена файлов и папок (например, структура и файловый контент
папки может совпадать байт в байт, но при этом иметь разные имена файлов и
каталогов - в этом случае хэш папки должен быть одинаковым или разным) ?
Что, если в папке будут 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
Цитата Сообщение от Убежденный Посмотреть сообщение
Интересный вопрос.
Допустим, хэш папки равен хэшу всех файлов, находящихся в ней.
Тогда вопросы: в каком порядке считать хэши этих файлов ?
Учитывать ли имена файлов и папок (например, структура и файловый контент
папки может совпадать байт в байт, но при этом иметь разные имена файлов и
каталогов - в этом случае хэш папки должен быть одинаковым или разным) ?
Что, если в папке будут reparse points - как с них снимать хэш ?
Что, если во время вычисления хэша в папке произойдут изменения ?
Нужно ли учитывать атрибуты файлов (системный, только для чтения, и т.п.) ?
Что, если файлы будут содержать альтернативные NTFS-потоки - их считать или нет ?
Как считать хэши пустых файлов ?
Как реагировать на одинаковые имена, различающиеся только регистром (Paris и PARIS) ?
И так далее. В общем, не такая уж и очевидная задача...
Т.е. самым оптимальным и верным вариантом будет вычислить значение хэша для каждого файла в папке и подпапках, и потом их сложить вместе?
Тогда напрашивается два вопроса:
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
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
23.08.2013, 11:06 9
ТС нечетко сформулировал вопрос, под "хеш папки" можно понимать:
а. хеш самого файла папки
б. хеш содержащихся в ней файлов
в. хеш содержащихся в ней и в ее подпапках файлов

наверное, это не все варианты, но даже по ним надо уточнять способ расчета:
- если хеш по файлу папки, то как учитывать удаленные записи?
- если по содержимому файлов, то в каком порядке их брать?
- что если у файла в папке изменится дата/время или имя, но содержимое не изменится?
0
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
24.08.2013, 07:53  [ТС] 10
Цитата Сообщение от zer0mail Посмотреть сообщение
ТС нечетко сформулировал вопрос, под "хеш папки" можно понимать:
а. хеш самого файла папки
б. хеш содержащихся в ней файлов
в. хеш содержащихся в ней и в ее подпапках файлов

наверное, это не все варианты, но даже по ним надо уточнять способ расчета:
- если хеш по файлу папки, то как учитывать удаленные записи?
- если по содержимому файлов, то в каком порядке их брать?
- что если у файла в папке изменится дата/время или имя, но содержимое не изменится?
Дата и время, насколько я знаю, не влияют на изменение хэша, хэш вычисляется по бинарному файлу.

Добавлено через 24 секунды
Цитата Сообщение от grizlik78 Посмотреть сообщение
При наличии инструмента — ничего сложного
Код
$ 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
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
24.08.2013, 09:51 11
Цитата Сообщение от Delvox Посмотреть сообщение
Не понял, можете по конкретнее?
Ну это я про сложность архивирования. При наличии архиватора организовать подсчёт суммы никаких проблем нет. Друге дело, что изменение времени модификации файла (вторая команда touch) будет приводить к изменению суммы. Более того, даже время модификации самого каталога folder будет влиять на сумму.

Если сумма должна зависеть только от содержимого файлов, то придётся обеспечить порядок обхода директорий в соответствии с каким-то порядком сортировки. Или же хэши отдельных файлов комбинировать коммутативно, чтобы от порядка обхода результат не зависел.
0
Ab
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
Цитата Сообщение от Delvox Посмотреть сообщение
MD5 хеш папки?
можете сказать в какой задачи вам это понадобилось? для каких целей
0
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
25.08.2013, 07:46  [ТС] 14
Цитата Сообщение от t1m0n Посмотреть сообщение
можете сказать в какой задачи вам это понадобилось? для каких целей
необходимо запретить изменение данных файлов в папке, а файлов много.
0
46 / 48 / 2
Регистрация: 16.08.2013
Сообщений: 257
25.08.2013, 11:21 15
Цитата Сообщение от Delvox Посмотреть сообщение
Дата и время, насколько я знаю, не влияют на изменение хэша, хэш вычисляется по бинарному файлу
Вот именно)) мы же когда берём хеш файла не вычисляем его с датами. легче всего рекурсивно пройтись по файлам папки в сортировке 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
Цитата Сообщение от t1m0n Посмотреть сообщение
ну возможно можно сделать так
список критически важных файлов при запуске программы проверяете их
и запускаете программу
через какое то время можете до проверять остальное

это игра и вы пишете апдейтер?
да, игра, я пишу лаунчер.
0
637 / 415 / 27
Регистрация: 03.11.2009
Сообщений: 1,855
26.08.2013, 12:07 18
Цитата Сообщение от Delvox Посмотреть сообщение
лаунчер
ну так полно игр, трудно глянуть как там реализовано?
уже пару дней потратили на выяснения хеша папки, когда можно было сделать пересчетом файлов как везде
0
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
26.08.2013, 12:15  [ТС] 19
Цитата Сообщение от t1m0n Посмотреть сообщение
ну так полно игр, трудно глянуть как там реализовано?
уже пару дней потратили на выяснения хеша папки, когда можно было сделать пересчетом файлов как везде
вы не знаете как можно библиотекой LZMA SDK архивировать папку?
0
26.08.2013, 12:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2013, 12:15
Помогаю со студенческими работами здесь

md5 папки
Доброго времени суток. Возможно ли считать md5 папки с файлами и после сверить? Добавлено через...

Проверка md5 папки
как можно получить md5 папки?

Рассчитать MD5 для папки
Кстате раз тема есть, может кто подскажет МD5 можно расчитать для папки, или для каждого файла по...

MD5 хеш сумма папки с файлами
Ребят помогите пожалуйста разобраться.. Я очень долго пытаюсь понять циклы но не как не выходит.....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru