Квантовый Ёжик (overquantum) wrote,
Квантовый Ёжик
overquantum

Categories:
  • Music:

ShaFile - программа расчета хэшей SHA-1 от файлов и каталогов

Command-line программа, предназначена для расчёта хэш-функции SHA-1 отдельных файлов, всех файлов в каталоге, а также каталогов с подкаталогами.
Хороша для индексирования содержимого CD/DVD дисков, проверки их на читаемость и сравнения копии с эталоном.


Возможности:
- Вычисляет криптографическую хэш-функцию SHA-1 от файлов
- Вычисляет SHA-1 от содержимого каталогов, независящую от именования файлов
- Формирует список файлов в каталоге и подкаталогах с размерами, атрибутами, датами-временами создания, хэшами и именами. Также считает количество файлов, подкаталогов и суммарный объём
- Позволяет сформировать zip-образ - удобный индекс для поиска файлов в большой коллекции носителей информации.

В программу встроена мини-справка на английском, а тут я приведу перевод и пояснения.

Параметры:
-f <[путь] имя файла> - вычислить хэш от 1 файла
-d <путь>          - вычислить хэши от всех файлов и подкаталогов от указанного каталога
-l <имя файла>     - [не реализовано] вычислить хэш от списка файлов
-s <имя файла>     - куда сохранять результат рассчёта (по умолчанию - см. ниже)
-z                 - сохранить zip-образ (только для каталога)
-i                 - не вычислять хэш, только сохранить список файлов
-b          - не ходить в подкаталоги
-t          - не сохранять атрибуты, размер и дату-время создания файла (только хэш и имя файла)
-v          - вывести результат на экран, не сохранять в файл
-p          - сохранять время считывания файла
-y          - использовать функцию SetCurrentDirectory (работает не всегда, но требуется для некоторых дисков с глубокой структурой подкаталогов)
-w          - не вычислять хэши каталогов (т.е. вычислять только хэши файлов)
-o          - вычислять хэш по алгоритму с ошибкой (как было в v0.9 - не SHA-1, но детерминировано)

По умолчанию:
Результат хэшифрования 1 файла сохраняется в <имя файла> + ".sha"
Результат хэшифрования каталога сохраняется в "folder.sha" в текущем каталоге

При хэшировании каталога на каждый файл и подкаталог для формируется запись такого вида:
[     R  ]      5 630 249 243 21.10.2009 20:38:11 326b505b5778139f9ae31e882cfce525201fe536 enwiki-20091009-pages-articles.xml.bz2
где:
<атрибуты> < размер в байтах> <   дата и время  > <        SHA-1 содержимого файла       > <  имя файла  >

В конце списка файлов и подкаталогов в каталоге записывается хэш каталога. Например:
hash: e6079fa8c40731898b8f878935f28827dda8953a

Хэш каталога считается как SHA-1 хэш от арифметической суммы хэшей всех файлов и подкаталогов. В итоге хэш каталога не зависит от именования и порядка расположения файлов и подкаталогов, но зависит от состава файлов и подкаталогов.
Zip-образ - zip-архив, воспроизводящий полную структуру файлов и подкаталогов, за исключением содержания файлов - вместо него файлы внутри zip-образа содержат подробные данные об исходном файле - путь, атрибуты, размер, дату-время создания, хэш и имя файла - в том же формате, что и в списке файлов. Zip-образ сохраняется в файл, имя которого получается добавлением ".zip" к (указанному) имени файла списка.
Zip-образы я использую для поиска файлов в моём архиве из 350 CD и DVD дисков. Индекс архива сейчас занимает 150 МБ. Самый большой zip-образ диска занимает 11 мегабайт (потому что на этом диске около 40000 файлов), а медиана размеров zip-образов - 15 килобайт.
Поиск по индексу занимает секунды и выполняется, например, Total Commander-ом - с помощью опции "Search archives". Некоторую проблему составляет только поиск по размеру файлов, поскольку размер исходных файлов на диске записан только внутри файлов в zip-образе, но и это решается довольно просто.

Ещё примеры использования:
1) Контроль целостности файлов при передаче. Нужно посчитать хэш до и после передачи, и сравнить два значения.
Искажение даже 1 бита файла приведёт к изменению хэша и это будет обнаружено при сравнении.
2) Контроль целостности файлов на носителях информации (диски, флешки и т.п.). Нужно посчитать хэши файлов при записи файлов и сохранить результаты. В последствии можно рассчитывать хэши снова и сравнивать результаты с первоначальными хэшами. Поскольку ShaFile умеет считать хэш каталога со всеми подкаталогами - можно сравнивать только хэш корневого каталога.
3) Формирования списка файлов и подсчёт объёмов - укажите ключ -i и программа не будет тратить время на чтение файлов и вычисление хэшей.
4) Простая проверка файлов на читаемость - для вычисления хэшей все файлы полностью считываются и в конце выводится количество ошибок. Если оно не 0 - значит были проблемы со считыванием файлов, например так:
Error opening file f:\Prikols\Wins\OKBUTTON.EXE
[     R  ]             34 308 16.05.1996 01:55:10 ffffffffffffffffffffffffffffffffffffffff OKBUTTON.EXE
...
TOTAL ERRORS: 1


Я лично выполняю проверку, что на CD и DVD диски записалась вся информация, которая была в подготовленном образе на HDD. Именно таким образом я обнаружил первые проявления проблемы с оперативной памятью - портился в среднем 1 бит на гигабайт скопированной/записанной информации.

Известные ограничения:
1) Испытывает проблемы с Unicode-символами в именах файлов и каталогов - "ü" и т.п. Не может прочитать такие файлы и каталоги, пишет сообщение об ошибке.
2) Если задаёте путь до каталога в кавычках - не ставьте в конце пути "\". Из-за особенностей разбора аргументов командной строки комбинация \" считается экранированной кавычкой, а не окончанием.

Скачать ShaFile v0.97.5
SHA1 exe-файла: EF3B64D66036FDB1F108C8096C257910412DD777

Предыдущии версии:
v0.97.3 - SHA1 exe-файла: 57382DD909183CBE392A6352BD7EFFCA1A8D76EE


UPD 2015-01-20: Примеры использования
1) ShaFile.exe -d E:\ -s dvd017.sha -z
Рассчёт хэшей всех файлов на диске E:, сохранение их в файл dvd017.sha и формирование zip-образа dvd017.sha.zip - например, для формирования индекса CD/DVD диска или для проверки целостности этого диска.

2) ShaFile.exe -d D:\ -i -s disk_d.lst
Формирование списка всех файлов на диске D без рассчёта хэшей - например, для формирования списка backup-а.

3) ShaFile.exe -f D:\enwiki-20091009-pages-articles.xml.bz2
Рассчитать хэш одного файла.

UPD: Из-за частого спама анонимные каменты теперь скринятся.
UPD 20181101: Версия 0.97.5. Исправлена ошибка составления zip-образ при -i, исправлена ошибки с недоступными каталогами, со слишком большим количеством каталогов и переполнением zip-образа
UPD 20200702: Ссылки заменены на яндекс-диск
UPD 20200702: Добавлены Известные ограничения
Tags: sha-1, shafile, software
Subscribe

  • SokobanCompact v0.7 - open source

    Опубликовал исходники SokobanCompact v0.7 под GPL v3 на github. SokobanCompact - бесплатная логическая игра типа Sokoban для Windows Mobile 6 и…

  • JPEGfix - чиним файлы JPEG самостоятельно

    JPEGfix - набор инструментов для ремонта повреждённых изображений в формате JPEG. Насколько я знаю, подобных программ в интернете нет, ни в…

  • Очень сильное колдунство

    За 20 лет я повидал много "танцев с бубнами" вокруг техники, которые давали результаты. Но пятничное... вне всяких пределов... В отпуске на моём…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 14 comments

  • SokobanCompact v0.7 - open source

    Опубликовал исходники SokobanCompact v0.7 под GPL v3 на github. SokobanCompact - бесплатная логическая игра типа Sokoban для Windows Mobile 6 и…

  • JPEGfix - чиним файлы JPEG самостоятельно

    JPEGfix - набор инструментов для ремонта повреждённых изображений в формате JPEG. Насколько я знаю, подобных программ в интернете нет, ни в…

  • Очень сильное колдунство

    За 20 лет я повидал много "танцев с бубнами" вокруг техники, которые давали результаты. Но пятничное... вне всяких пределов... В отпуске на моём…