Считается ли хеширование файла MD5 достаточно хорошим методом для его однозначной идентификации, учитывая все нарушения алгоритма MD5, проблемы безопасности и т. Д.? Безопасность здесь не является моей главной задачей, но важна уникальная идентификация каждого файла.
есть идеи?
Ответы:
Да. MD5 был полностью взломан с точки зрения безопасности, но вероятность случайного столкновения все еще исчезающе мала. Просто убедитесь, что файлы создаются не кем-то, кому вы не доверяете и который может иметь злой умысел.
источник
Для практических целей созданный хеш может быть подходящим образом случайным, но теоретически всегда существует вероятность столкновения из-за принципа голубятни . Наличие разных хешей, безусловно, означает, что файлы разные, но получение одного и того же хеша не обязательно означает, что файлы идентичны.
Поэтому использование хэш-функции для этой цели - независимо от того, является ли безопасность проблемой или нет - всегда должно быть только первым шагом проверки, особенно если известно, что хеш-алгоритм легко создает коллизии. Чтобы точно определить, отличаются ли два файла с одинаковым хешем, вам придется побайтово сравнить эти файлы.
источник
MD5 будет достаточно хорош, если у вас нет противника. Однако кто-то может (намеренно) создать два разных файла с одинаковым значением хэша (это называется коллизией), и это может быть или не быть проблемой, в зависимости от вашей конкретной ситуации.
Поскольку знание того, применимы ли известные слабые стороны MD5 к данному контексту, является тонким вопросом, рекомендуется не использовать MD5. Безопасный ответ - использование устойчивой к коллизиям хэш-функции (SHA-256 или SHA-512). Кроме того, использование MD5 является плохим пиаром (если вы используете MD5, будьте готовы оправдываться; никто не будет сомневаться в том, что вы используете SHA-256).
источник
return 0;
в areturn 1;
). Это маловероятно, но риск столкновения с SHA-256 еще меньше. Математически вы не можете быть уверены, что два файла с одинаковым значением хэша идентичны, но вы не можете быть уверены в этом, сравнивая сами файлы, если вы используете компьютер для сравнения. Я имею в виду, что бессмысленно выходить за рамки 99,999 ... 9% уверенности, а SHA-256 уже обеспечивает большее.MD5 может вызывать коллизии. Теоретически, хотя это маловероятно, миллион файлов подряд может дать один и тот же хэш. Не испытывайте удачу и проверяйте наличие коллизий md5 перед сохранением значения.
Мне лично нравится создавать md5 из случайных строк, что снижает накладные расходы на хеширование больших файлов. При обнаружении коллизий я выполняю итерацию и повторно хэширую с добавленным счетчиком цикла.
Вы можете прочитать о принципе «ящика» .
источник
Я бы не рекомендовал это. Если приложение будет работать в многопользовательской системе, может быть пользователь, у которого будет два файла с одинаковым хешем md5 (он может быть инженером и играть с такими файлами или просто любопытствовать - их легко загрузить с http: / /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , я сам при написании этого ответа скачал два образца). Другое дело, что некоторые приложения могут хранить такие дубликаты по какой-либо причине (я не уверен, есть ли такие приложения, но возможность существует).
Если вы однозначно идентифицируете файлы, созданные вашей программой, я бы сказал, что можно использовать MD5. В противном случае я бы порекомендовал любую другую хеш-функцию, где пока не известно о коллизиях.
источник
Лично я думаю, что люди слишком часто используют необработанные контрольные суммы (выберите свой метод) других объектов, чтобы действовать как уникальные идентификаторы, когда они действительно хотят иметь уникальные идентификаторы. Отпечаток объекта для этого использования не был намерением и, вероятно, потребует больше размышлений, чем использование uuid или аналогичного механизма целостности.
источник
MD5 не работает, вместо этого вы можете использовать SHA1 (реализовано на большинстве языков)
источник
При хешировании коротких (<несколько K?) Строк (или файлов) можно создать два хэш-ключа md5, один для фактической строки, а второй для обратной строки, соединенных с короткой асимметричной строкой. Пример: md5 (обратный (строка || '1010')). Добавление дополнительной строки гарантирует, что даже файлы, состоящие из серии одинаковых битов, сгенерируют два разных ключа. Пожалуйста, поймите, что даже при этой схеме существует теоретическая вероятность того, что два хеш-ключа будут идентичны для неидентичных строк, но вероятность кажется чрезвычайно малой - что-то порядка квадрата вероятности одиночного столкновения md5 и экономии времени может быть значительным, когда количество файлов растет. Можно также рассмотреть более сложные схемы создания второй струны,
Чтобы проверить наличие коллизий, можно запустить этот тест на уникальность хэш-ключей md5 для всех бит_векторов в базе данных:
выберите md5 (bit_vector), count (*), bit_and (bit_vector) из db с
группой bit_vector по md5 (bit_vector), bit_vector, имеющим bit_and (bit_vector) <> bit_vector
источник
Мне нравится думать о MD5 как о индикаторе вероятности при хранении большого количества файловых данных.
Если хэши равны, тогда я знаю, что мне нужно сравнивать файлы побайтово, но это может произойти только несколько раз по ложной причине, в противном случае (хеши не равны) я могу быть уверен, что мы говорим о двух разных файлах .
источник