Предположим, что Вы хотели сделать сайт хостинга файлов для людей, чтобы загрузить их файлы и отправить ссылку их друзьям для получения его позже, и Вы хотите обеспечить, чтобы файлы были дублированы, где мы храним их, действительно ли sha1_file PHP достаточно хорош для задачи? Там какая-либо причина не состоит в том, чтобы использовать md5_file вместо этого?
Для frontend это будет затенено с помощью исходного хранилища имени файла в базе данных, но некоторые дополнительные проблемы были бы то, если это покажет что-нибудь об исходном плакате. Файл наследовал метаинформацию с ним как измененный последний или кто отправил его, или этот материал является базирующимся в файловой системе?
Кроме того, действительно ли использование является солью, несерьезной, так как безопасность в отношениях нападения таблицы радуги ничего не значит для этого, и хеш мог позже использоваться в качестве контрольной суммы?
Одна последняя вещь, масштабируемость? первоначально, это только будет используемым для маленьких файлов несколько megs большой, но в конечном счете...
Редактирование 1: точка хеша должна, прежде всего, избежать дублирования файла, для не создания мрака.
Согласно моему комментарию к ответу @ykaganovich, SHA1 (что удивительно) немного быстрее, чем MD5.
Судя по вашему описанию проблемы, вы не пытаетесь создать безопасный хэш - просто скрываете файл в большом пространстве имен - в этом случае использование таблиц соли / радуги не имеет значения - единственное соображение - вероятность ложное столкновение (где два разных файла дают один и тот же хеш). Вероятность того, что это произойдет с md5, очень и очень мала. Еще более удаленно с sha1. Однако вам нужно подумать о том, что происходит, когда 2 независимых пользователя загружают один и тот же варез на ваш сайт. Кому принадлежит файл?
На самом деле, похоже, нет никакой причины использовать хеш - просто сгенерируйте достаточно длинное случайное значение.
SHA отлично работает в любой «нормальной» среде. Хотя Бен Линн - автор «Git Magic» говорит:
A.1. Слабые стороны SHA1 С течением времени криптографы обнаруживают все больше и больше слабых мест SHA1 . Уже сейчас обнаружение хеш-коллизий возможно для хорошо финансируемых организаций. В течение лет, возможно, даже на обычном ПК будет достаточно вычислительной мощности, чтобы незаметно повредить репозиторий Git. Надеюсь, что раньше Git перейдет на улучшенную хэш-функцию. дальнейшее исследование уничтожает SHA1.
Вы всегда можете проверить SHA256 или другие, которые еще длиннее. Обнаружить коллизию MD5 проще, чем с SHA1.
Оба варианта должны быть в порядке. sha1 является более безопасной хэш-функцией, чем md5, что также означает, что она медленнее, что, вероятно, означает, что вы должны использовать md5 :). Вы все еще хотите использовать соль для предотвращения атак типа "открытый текст/радуга" в случае очень маленьких файлов (не делайте предположений о том, что люди решат загрузить на ваш сайт). Разница в производительности будет незначительной. Вы все еще можете использовать его в качестве контрольной суммы, если вы знаете соль.
Что касается масштабируемости, я бы предположил, что вы, скорее всего, будете привязаны к IO, а не к CPU, поэтому я не думаю, что вычисление контрольной суммы даст вам большие накладные расходы, особенно если вы будете делать это в потоке по мере загрузки.