Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.78
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
22.08.2013, 08:16     Вычисление MD5 суммы папки #1
Здравствуйте! Каким самым простым образом можно вычислить MD5 хеш папки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 08:16     Вычисление MD5 суммы папки
Посмотрите здесь:

C++ Вычисление суммы
вычисление суммы C++
C++ Вычисление суммы четных и суммы нечетных чисел в одномерном массиве
Генерация MD5 хеш суммы файла C++
C++ Непонятка с функцией md5 нахождения хэш - суммы
Вычисление суммы квадратов четных чисел и суммы кубов нечетных чисел C++
C++ Ввод элементов массива с клавиатуры, вычисление суммы по формуле, нахождение максимальной суммы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
22.08.2013, 09:29     Вычисление MD5 суммы папки #2
Посмотреть посчитанный? Винда же вроде считает какой-то хеш, его можно посмотреть в свойствах папки. Наверняка есть API для получения готового хеша.
CheshireCat
Эксперт С++
2909 / 1237 / 78
Регистрация: 27.05.2008
Сообщений: 3,318
22.08.2013, 11:37     Вычисление MD5 суммы папки #3
Мммммм.... Вообще-то MD5 (и вообще любой) хэш однозначно вычисляется только для последовательности байтов.

Так вот: что считать такой "последовательностью байтов" для папки, содержащей в общем случае неограниченное количество файлов и вложенных подпапок (каждая из которых является в общем случае точно такой же папкой)?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
22.08.2013, 11:45     Вычисление MD5 суммы папки #4
Папка - это же по сути просто файл. Его хеш и считать. Вложенность на результат не повлияет.
Убежденный
Системный программист
 Аватар для Убежденный
14477 / 6461 / 1020
Регистрация: 02.05.2013
Сообщений: 10,698
Завершенные тесты: 1
22.08.2013, 12:09     Вычисление MD5 суммы папки #5
Цитата Сообщение от Delvox Посмотреть сообщение
Каким самым простым образом можно вычислить MD5 хеш папки?
Интересный вопрос.
Допустим, хэш папки равен хэшу всех файлов, находящихся в ней.
Тогда вопросы: в каком порядке считать хэши этих файлов ?
Учитывать ли имена файлов и папок (например, структура и файловый контент
папки может совпадать байт в байт, но при этом иметь разные имена файлов и
каталогов - в этом случае хэш папки должен быть одинаковым или разным) ?
Что, если в папке будут reparse points - как с них снимать хэш ?
Что, если во время вычисления хэша в папке произойдут изменения ?
Нужно ли учитывать атрибуты файлов (системный, только для чтения, и т.п.) ?
Что, если файлы будут содержать альтернативные NTFS-потоки - их считать или нет ?
Как считать хэши пустых файлов ?
Как реагировать на одинаковые имена, различающиеся только регистром (Paris и PARIS) ?
И так далее. В общем, не такая уж и очевидная задача...
CheshireCat
Эксперт С++
2909 / 1237 / 78
Регистрация: 27.05.2008
Сообщений: 3,318
22.08.2013, 12:16     Вычисление MD5 суммы папки #6
Во! Именно. Коллега Убежденный просто более развернуто и подробно задал ключевой вопрос.
Сам по себе подсчет MD5 (да и любого другого) хеша от последовательности байтов - тривиальная задача, но вот подсчет того же самого для папки - задача весьма нетривиальная....
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
23.08.2013, 04:41  [ТС]     Вычисление MD5 суммы папки #7
Цитата Сообщение от Убежденный Посмотреть сообщение
Интересный вопрос.
Допустим, хэш папки равен хэшу всех файлов, находящихся в ней.
Тогда вопросы: в каком порядке считать хэши этих файлов ?
Учитывать ли имена файлов и папок (например, структура и файловый контент
папки может совпадать байт в байт, но при этом иметь разные имена файлов и
каталогов - в этом случае хэш папки должен быть одинаковым или разным) ?
Что, если в папке будут reparse points - как с них снимать хэш ?
Что, если во время вычисления хэша в папке произойдут изменения ?
Нужно ли учитывать атрибуты файлов (системный, только для чтения, и т.п.) ?
Что, если файлы будут содержать альтернативные NTFS-потоки - их считать или нет ?
Как считать хэши пустых файлов ?
Как реагировать на одинаковые имена, различающиеся только регистром (Paris и PARIS) ?
И так далее. В общем, не такая уж и очевидная задача...
Т.е. самым оптимальным и верным вариантом будет вычислить значение хэша для каждого файла в папке и подпапках, и потом их сложить вместе?
Тогда напрашивается два вопроса:
1) Как это можно реализовать WinApi функциями, или есть более простые библиотеки для работы с директориями?
2) Как вместе можно сложить хэши md5?

Или же, есть еще один вариант, это архивировать папку, и получить хэш уже .rar или .zip архива, мне кажется этот вариант более сложным.
grizlik78
Эксперт С++
 Аватар для grizlik78
1888 / 1420 / 103
Регистрация: 29.05.2011
Сообщений: 2,970
23.08.2013, 10:16     Вычисление MD5 суммы папки #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  -
zer0mail
2289 / 1915 / 192
Регистрация: 03.07.2012
Сообщений: 6,848
Записей в блоге: 1
23.08.2013, 11:06     Вычисление MD5 суммы папки #9
ТС нечетко сформулировал вопрос, под "хеш папки" можно понимать:
а. хеш самого файла папки
б. хеш содержащихся в ней файлов
в. хеш содержащихся в ней и в ее подпапках файлов

наверное, это не все варианты, но даже по ним надо уточнять способ расчета:
- если хеш по файлу папки, то как учитывать удаленные записи?
- если по содержимому файлов, то в каком порядке их брать?
- что если у файла в папке изменится дата/время или имя, но содержимое не изменится?
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
24.08.2013, 07:53  [ТС]     Вычисление MD5 суммы папки #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  -
Не понял, можете по конкретнее?
grizlik78
Эксперт С++
 Аватар для grizlik78
1888 / 1420 / 103
Регистрация: 29.05.2011
Сообщений: 2,970
24.08.2013, 09:51     Вычисление MD5 суммы папки #11
Цитата Сообщение от Delvox Посмотреть сообщение
Не понял, можете по конкретнее?
Ну это я про сложность архивирования. При наличии архиватора организовать подсчёт суммы никаких проблем нет. Друге дело, что изменение времени модификации файла (вторая команда touch) будет приводить к изменению суммы. Более того, даже время модификации самого каталога folder будет влиять на сумму.

Если сумма должна зависеть только от содержимого файлов, то придётся обеспечить порядок обхода директорий в соответствии с каким-то порядком сортировки. Или же хэши отдельных файлов комбинировать коммутативно, чтобы от порядка обхода результат не зависел.
Ab
75 / 75 / 1
Регистрация: 03.05.2012
Сообщений: 161
24.08.2013, 10:25     Вычисление MD5 суммы папки #12
Delvox, прислушайтесь таки к Убежденному. Он только часть потенциальных проблем озвучил, но и их за глаза хватит. Либо делайте список файлов с указанием хеша для каждого из них, либо архивируйте папку и считайте хеш для получившегося файла-архива.
t1m0n
 Аватар для t1m0n
598 / 385 / 19
Регистрация: 03.11.2009
Сообщений: 1,806
24.08.2013, 19:26     Вычисление MD5 суммы папки #13
Цитата Сообщение от Delvox Посмотреть сообщение
MD5 хеш папки?
можете сказать в какой задачи вам это понадобилось? для каких целей
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
25.08.2013, 07:46  [ТС]     Вычисление MD5 суммы папки #14
Цитата Сообщение от t1m0n Посмотреть сообщение
можете сказать в какой задачи вам это понадобилось? для каких целей
необходимо запретить изменение данных файлов в папке, а файлов много.
NinjaStar
46 / 48 / 2
Регистрация: 16.08.2013
Сообщений: 257
25.08.2013, 11:21     Вычисление MD5 суммы папки #15
Цитата Сообщение от Delvox Посмотреть сообщение
Дата и время, насколько я знаю, не влияют на изменение хэша, хэш вычисляется по бинарному файлу
Вот именно)) мы же когда берём хеш файла не вычисляем его с датами. легче всего рекурсивно пройтись по файлам папки в сортировке 0-9A-zА-я - и либо сложить хеш суммы в одну строку и вывести окончательный хеш, либо просто потоком из всех файлов вычислить сразу один хеш (разумеется вставляя названия файлов). Ну конечно для самых умных можно провести работу напрямую с файловой системой
t1m0n
 Аватар для t1m0n
598 / 385 / 19
Регистрация: 03.11.2009
Сообщений: 1,806
25.08.2013, 20:43     Вычисление MD5 суммы папки #16
ну возможно можно сделать так
список критически важных файлов при запуске программы проверяете их
и запускаете программу
через какое то время можете до проверять остальное

это игра и вы пишете апдейтер?
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
26.08.2013, 02:52  [ТС]     Вычисление MD5 суммы папки #17
Цитата Сообщение от t1m0n Посмотреть сообщение
ну возможно можно сделать так
список критически важных файлов при запуске программы проверяете их
и запускаете программу
через какое то время можете до проверять остальное

это игра и вы пишете апдейтер?
да, игра, я пишу лаунчер.
t1m0n
 Аватар для t1m0n
598 / 385 / 19
Регистрация: 03.11.2009
Сообщений: 1,806
26.08.2013, 12:07     Вычисление MD5 суммы папки #18
Цитата Сообщение от Delvox Посмотреть сообщение
лаунчер
ну так полно игр, трудно глянуть как там реализовано?
уже пару дней потратили на выяснения хеша папки, когда можно было сделать пересчетом файлов как везде
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 12:15     Вычисление MD5 суммы папки
Еще ссылки по теме:

Вычисление суммы C++
C++ Вычисление суммы
Вычисление степени матрицы, вычисления произведения двух матриц, вычисление суммы двух матриц C++
C++ Вычисление суммы
Вычисление суммы C++

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

Или воспользуйтесь поиском по форуму:
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
26.08.2013, 12:15  [ТС]     Вычисление MD5 суммы папки #19
Цитата Сообщение от t1m0n Посмотреть сообщение
ну так полно игр, трудно глянуть как там реализовано?
уже пару дней потратили на выяснения хеша папки, когда можно было сделать пересчетом файлов как везде
вы не знаете как можно библиотекой LZMA SDK архивировать папку?
Yandex
Объявления
26.08.2013, 12:15     Вычисление MD5 суммы папки
Ответ Создать тему
Опции темы

Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru