Войти

Показать полную графическую версию : [решено] md5 всех файлов в папке с подпапками


Voron-orel
15-06-2017, 20:53
В общем есть флешка с кучей bios для разных материнских плат(знаю не лучший вариант), нужно два батника первый это который создаст md5 суммы всех файлов, а если уже есть то пропустит, в каталоге bios и второй это проверка этих сумм, результат не пройденных запишется в файл. Не когда не пробовал такое проделывать, вот и думаю может кто здесь такое уже делал?

greg zakharov
16-06-2017, 09:17
Не самым лучшим вариантом в данном случае выступает скорее md5: достаточно много написано на тему коллизий оного, что даже сам его автор (вроде бы Ривест, если не ошибаюсь) рекомендовал пользоваться более продвинутыми алгоритмами. Но если оставить вопросы безопасности в стороне, получим другие грабли, а именно отсутствие штатных средств вичисления хэшей в Windows < 6.0; там придется либо использовать сторонние утилиты вроде sigcheck или openssl, либо взять C(#|\+\+)? компилятор и нарисовать чекер хэшей самостоятельно (ничего сложного в том нет). В случае в Vista и выше можно использовать certutil, позволяющий прочекать md[4|5], sha[1|256|384|512]. Так что для начала советую определиться с:
1) кругом ОС, на которых подобная задача должна решаться
2) действительно ли желаете использовать md5
В общем, думайте.

Voron-orel
17-06-2017, 16:06
greg zakharov, использовать буду преимущественно на win 7 на 10, md5 не обязательна, главная задача проверка целостности файлов bios, чтобы не прошить случайно битый, т.к. на флешке очень большой шанс, что файлы повредятся. Думаю использовать fciv.exe у нее вроде как есть функция для создания хеш сумм множества файлов и записи сумм в файл для последующей сверки.

Voron-orel
17-06-2017, 17:23
Пока накидал вот такой черновик, вроде все работает. @Echo off

:m0
CLS
Echo.
Echo Выберите команду:
Echo.
Echo 1 - Создать хеш файлов
Echo 2 - Проверить хеш файлов
Echo 0 - Выход
echo.

Set /p choice="Ваш выбор: "
if not defined choice goto m0
if "%choice%"=="1" goto m1
if "%choice%"=="2" goto m2
if "%choice%"=="0" goto end
Echo.
goto m0

:m1
CLS
Echo Удаление старого хеш файла
del /F /S /Q /A hashes.xml
Echo Создание хеша... Подождите...
fciv -add ..\ -r -exc exceptions.txt -xml hashes.xml > log.txt
Echo Открытие лог файла
log.txt
Exit

:m2
CLS
Echo Проверка хеша файлов... Ждите...
fciv -v -xml hashes.xml > log.txt
Echo Готово. Открытие лог файла.
log.txt
Exit




Echo.
Echo.
Echo.
goto m0

:end
Exit Единственное, что если не удалять старый файл хешей, то программа не сверяет с ним, а добавляет в него данные, из за чего в этом файле создается куча дубликатов, решил так, чтобы добавить новый хеш, то лучше удалить и создать новый файл. //
// File Checksum Integrity Verifier version 2.05.
//
Could not create the registry key.
Starting checksums verification : 06/17/2017 at 17h17'16



List of modified files:

-----------------------

..\fciv\hashes.xml

Hash is : 178173a8b825058e2edd6d5d6137f280

It should be : 67bf8a87d456112e07d3ec642c2d3c28




End Verification : 06/17/2017 at 17h21'06

greg zakharov
17-06-2017, 17:34
Voron-orel, если Win >= 7, то лучше все же остановиться на certutil: во-первых, вещь штатная, во-вторых, fciv - шлак, какой еще нужно поискать. В первом случае пример решения может выглядеть так:
@echo off
setlocal
call:sha256sum source.bin sum
call:verify source.bin %sum%
endlocal
exit /b

:sha256sum
for /f "delims=" %%i in (
'certutil -hashfile "%~1" SHA256^
^| findstr /virc:"certutil"'
) do set "raw=%%i"
set "%2=%raw: =%"
exit /b

:verify
for /f "tokens=1" %%i in (
'findstr /irc:"\*%~1$" sig.txt'
) do (
if /i "%%i" equ "%2" (
echo:SUCCESS: %1 has not been corrupt.
)
)
exit /b
где sig.txt представляет из себя:
d4d8cc319e85c8d523aa1ec6fa7f069673b8301e09bbc792b03dada89ce25f03 *source.bin
e817cc319e85c8f523aa1ec6fa7f06967238301e09bbc792b03dada89ce25f03 *source1.bin
...
При доработке напильником можно получить вполне неплохой чекер, а вообще лучше использовать PowerShell, ибо он штатный начиная с Win7, да и чекать\сверять хэши в нем проще.
Что касается сторонних утилит. Есть порты UNIX'овых утилит под винду для сверки хэшей, но в данном случае, наверное, лучше взять gpg: подписать бинарники, а после чекать подписи.




© OSzone.net 2001-2012