У меня есть DataStore
, предназначенный для хранения наборов данных. Пользователи могут загружать наборы данных в хранилище данных, но сначала проверяют, существует ли набор данных в DataStore
, и он загружается только в том случае, если возвращаемое значение равно false
. Смотрите схему последовательности:Лучший способ идентификации и сравнения файлов в архитектуре клиент-сервер
Это осуществляется путем определения наборов данных с их контрольными суммами и сравнением клиентов контрольной суммы с теми, в DataStore
. Алгоритм теперь CRC32. После некоторых исследований выяснилось, что это может быть опасно из-за проблемы с днем рождения: With CRC32, for 1% probability of collision, there needs to be 9300 datasets, and 5000 datasets for 25% probability.
Номера говорят об этом очень рискованно с CRC32. Контрольную сумму нужно легко вычислить, поэтому она не накладывает слишком большой нагрузки на клиента. Есть ли способ - возможно, сложная вторичная проверка - сказать, что разные наборы данных с совпадающими контрольными суммами отличаются? Или единственный способ выбрать функцию с большим количеством бит, учитывая максимальное количество наборов данных?
PS: Я знаю; все вопросы о сопоставлении файлов уже заданы, но я не мог найти ответы на все мои вопросы.
используйте хороший хеш, например sha1, и размер файла в байтах. Например: '328be60d5b2644fbb778b70d34e201ba08d02dba: 27247300' (это новейший' OSXHIGuidelines.pdf'). –
@DanD. Хорошее предложение, вы должны были разместить это как ответ. Изменяет ли размер файла вероятность? Математическая демонстрация и/или более подробное объяснение были бы замечательными. –