2008-10-15 3 views
6

Я хочу генерировать уникальные имена файлов для каждого изображения, поэтому я использую MD5 для создания имен файлов. Поскольку два одинаковых изображения могут появляться из разных мест, я хотел бы на самом деле основывать хэш на содержимом изображения. Какие предостережения есть это?Любые предостережения для создания уникальных имен файлов для случайных изображений путем запуска MD5 над содержимым изображения?

(делать это с PHP5 для чего это стоит)

ответ

2

Кажется, хорошо для меня, если вы нормально с 32-символьными именами файлов.

Edit: я бы не использовать это в качестве основы (скажем) центральную базу данных ФБР террористических Mugshots, поскольку достаточно мотивированы злоумышленник, вероятно, может придумать образ, который имел тот же MD5, как существующий , Если это было, тогда вы могли бы использовать SHA1 вместо этого, что несколько более безопасно.

5

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

Остерегайтесь того, что при удалении изображений вы должны быть осторожны. Если вы удаляете запись изображения, указывающую на какой-либо файл, и вы также удаляете файл, вы можете удалить файл с другой записью, указывающей на то же изображение (которое, к примеру, принадлежит другому пользователю).

0

Если у вас есть два одинаковых изображения, загруженных из разных мест, скажем, фото на складе, то вы можете закончить переписывание «оригинала». Однако это означало бы, что вы сохраняете только одну копию, а не две.

С учетом сказанного я не вижу больших проблем с тем, как вы это описывали.

0

Это займет много времени. Почему бы вам просто не назначить им последовательные идентификаторы?

+0

Потому что, если два человека загружают одно и то же изображение, я не хочу его хранить дважды. – 2009-03-09 21:34:45

1

Вместо этого вы можете использовать UUID?

0

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

3

Учитывая полное случайное содержимое файла и хороший криптографический хэш, вероятность того, что будут два файла с одинаковым значением хэша, достигнет 50%, если количество файлов примерно равно 2 (количество бит в хэш-функции/2). То есть для 128-битного хеша будет 50% вероятность хотя бы одного столкновения, когда количество файлов достигнет 2^64.

Содержимое вашего файла явно не случайное, но я не знаю, насколько сильно это влияет на вероятность столкновения. Это называется атакой на день рождения, если вы хотите больше искать Google.

Это вероятностная игра. Если количество изображений будет существенно меньше 2^64, вы, вероятно, в порядке. Если вы все еще обеспокоены, использование комбинации SHA-1 плюс MD5 (в качестве еще одного предложенного ответа) приведет вас к 288 высококачественным хэш-битам, что означает, что у вас будет 50% вероятность столкновения являются 2^144 файлов. 2^144 - большое количество. Могущественный. Можно даже сказать огромное.

3

Вы должны использовать SHA-1 вместо MD5, потому что MD5 сломан. Существуют пары разных файлов с одним и тем же хешем MD5 (не теоретические, они на самом деле известны, и существуют алгоритмы генерации еще большего количества пар).Для вашего приложения это означает, что кто-то может загрузить два разных изображения, которые будут иметь один и тот же MD5-хеш (или кто-то может создать такую ​​пару изображений и опубликовать их где-нибудь в Интернете, так что два из ваших пользователей позже попытаются загрузить их, путающие результаты).

0

ImageMagick и PHP-класс imagick, доступ к которому способен интерпретировать изображения более субъективно, чем функции хэширования такими факторами, как цвет. Есть бесчисленные множество методов и пользовательские предпочтения, чтобы рассмотреть так вот некоторые ресурсы, охватывающие AFEW подходов, чтобы увидеть, что может удовлетворить ваше предполагаемое применение:

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

Смежные вопросы