Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] md5 всех файлов в папке с подпапками (http://forum.oszone.net/showthread.php?t=327637)

Voron-orel 15-06-2017 20:53 2744959

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

greg zakharov 16-06-2017 09:17 2745068

Не самым лучшим вариантом в данном случае выступает скорее 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 2745408

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

Voron-orel 17-06-2017 17:23 2745428

Пока накидал вот такой черновик, вроде все работает.
Запуск fciv
Код:

@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 2745434

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: подписать бинарники, а после чекать подписи.


Время: 01:59.

Время: 01:59.
© OSzone.net 2001-