Ищете кроссплатформенную / переносимую программу, которая выбрасывает криптографические хеши файлов

334
PoorLuzer

Я ищу программу, которая должна быть переносимой с исходного кода в Windows и Linux (например, ANSI C и т. Д.), Которая генерирует криптографические хеши, такие как MD5, SHA и т. Д., А также CRC32 файла / списка файлов, передаваемых ему.

Я буду запускать этот исполняемый файл на терабайтах файлов, генерируя их сигнатуры SHA, MD5 и CRC32 (и многие другие в будущем), поэтому скорость важна .

Я имел в виду именно то, что ReHash - это ReHash, ReHash .

К сожалению, я видел, что многие пользователи жаловались на то, что есть ошибки в реализации хэшей, а также ошибки в способе заполнения (для блочных алгоритмов).

Будучи не экспертом в криптографии и просто ища решение для черного ящика, которое просто дает мне хеш-коды, которые я хочу, не требуя от меня больше, чем компиляции некоторого кода, я задавался вопросом, нет ли ничего лучше?

Конечно, я мог бы написать на Python программу для склеивания, которая использовала бы модули crypto для генерации того, что мне нужно, но я бы предпочел скомпилированный двоичный файл из языка, подобного C.

Я буду запускать этот исполняемый файл на терабайтах файлов, генерировать их подписи SHA, MD5 и CRC32 (и в будущем) и обрабатывать все это из кода Python, поэтому было бы предпочтительнее что-то совместимое с Python, но не за счет C как скорость.

1

2 ответа на вопрос

2
Gilles

Криптооперации Python реализованы в собственном коде (скомпилирован из C). Поскольку вам нужны значения в программе на Python, их будет проще.

Linux поставляется с утилитами для расчета контрольной суммы ( cksum, md5sum, sha1sum, ...). То же самое делают большинство других объединений. Существует несколько портов Windows для утилит GNU (это то, что вы получаете в Linux): Cygwin, Gnuwin32, Msys, ... Вам потребуются достаточно недавние утилиты, если вы хотите получить SHA-256 и SHA-512.

Существует несколько реализаций ANSI C с очень либеральными лицензиями различных криптографических алгоритмов, часто не собранными в одном дистрибутиве. Вы можете найти их и проверить их на небольшом входе, чтобы проверить их надежность.

В Windows убедитесь, что вы правильно обрабатываете файлы как двоичные или текстовые, так как контрольные суммы определяются для байтовых потоков, а не для линейных потоков. (Обычно вы хотите открыть файлы в двоичном режиме, но если у вас есть текстовый файл, перекодированный в конец строки Windows, вам нужно будет открыть его как текст, чтобы полностью изменить эффект.) В любой ОС убедитесь, что Вы не делаете никакого перевода кодировки при открытии файла.

Поскольку скорость очень важна для вас, соберите все реализации, которые вы можете найти, и сравните их с вводом среднего размера (несколько мегабайт). Различные реализации могут дать лучшую скорость на разных архитектурах. 64-битные реализации, скорее всего, будут быстрее, если их вообще можно будет запустить.

Хотя подпрограммы шифрования написаны на C, я, похоже, не заметил ни одной функции, которая принимала имя файла в качестве аргумента. Это означает, что мне нужно будет открыть файл и прочитать его и т. Д. - все из Python. Это означает, что это не будет похоже на производительность. Кроме того, я бы больше заинтересовался существующим решением, чем своим собственным! PoorLuzer 14 лет назад 0
Но процедуры файла * также * в C. Ignacio Vazquez-Abrams 14 лет назад 0
2
Rich Homolka

OpenSSL имеет инструменты для вычисления хэшей. Проект cygwin ( http://www.cygwin.com/ ) имеет инструменты openssl. Хотя это будет немного медленнее, чем в чисто Windows-приложении, из-за уровня cygwin, вы также получите среду, в которой вы можете написать скрипт для генерации хеша.

А в Python есть привязка OpenSSL, что делает его альтернативой стандартному hashlib. Слой Cygwin не должен влиять на скорость чисто целочисленных вычислений, но качество компилятора может (я уверен, что есть лучшие компиляторы для win32 / i386, чем gg Cygwin, особенно если возможна 64-битная версия). Gilles 14 лет назад 1
Так какой из них будет быстрее и * правильнее *: OpenSSL или hashlib? PoorLuzer 14 лет назад 0
Оба будут правильными, они реализуют один и тот же алгоритм. Быстро, тебе нужно проверить. Я думаю, что легкость реализации облегчает просмотр огромного набора данных важнее, чем скорость. Rich Homolka 14 лет назад 1
hashlib будет «проще» реализовать, так как он встроен. Позвольте мне посмотреть, смогу ли я заставить некоторые из этих файловых верификаторов работать правильно и выдать желаемые хэши, прежде чем вводить какой-то код, чтобы сделать то же самое. PoorLuzer 14 лет назад 0

Похожие вопросы