2017-02-18 38 views

ответ

0

Вы можете хэш-файлы и сравнить хэши через сеть.

Хорошая хеш-функция спроектирована так, что если во входной функции есть только небольшое различие, то выход будет совершенно другим. Кроме того, большинство хэш-функций имеют выходную длину 160-512 бит в настоящее время. Если вы захотите сравнить два файла размером в несколько гигабайт, вам нужно будет отправить небольшую строку по 512 бит по сети, чтобы узнать, соответствуют ли хэши.

Если у вас есть миллионы файлов, возможно, это было бы уже много. Решение будет выглядеть следующим образом:

  1. Hash каждый файл на каждом компьютере
  2. Затем конкатенации хэш и хэш сцепленной строки снова
  3. Теперь сравните этот вывод, если он отличается вы знаете, что есть разница в этих файлах.
  4. Чтобы узнать, какой файл отличается (или даже где именно в файле), вы можете использовать двоичный поиск:
  5. Разделить миллионы файлов на две части, перейдите к шагу 1-3 (если у вас достаточно места, вы можете сохраните хэш каждого файла для ускорения).
  6. Теперь для каждого из двух хешей, которые отличаются, переходите к шагу 4-6 рекурсивно.
  7. Если вы обнаружили файлы, которые отличаются, вы можете снова разбить файл на количество строк и работать как в 4-6.
  8. В какой-то момент количество строк будет таким маленьким, что хэш может быть длиннее фактического содержимого строк. Теперь, конечно, более эффективно сравнивать фактический контент наивным образом.

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

+0

Спасибо ... Можете ли вы, пожалуйста, немного уточнить, что мне задали этот вопрос в интервью для позиции, связанной с веб-безопасностью (ясно, что я не подходит для этого). Позвольте мне перефразировать вопрос: Миллионы файлов в двух системах и в сети медленные, Как мы можем проверить, не существует ли один символ в одном файле –

+0

@VivekKumar см. Мое редактирование –

0

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

+0

Спасибо ... Можете ли вы пожалуйста, уточните немного. Мне задали этот вопрос в интервью для позиции, связанной с веб-безопасностью (ясно, что я не подходит для этого). Позвольте мне перефразировать вопрос: миллионы файлов в двух системах и в сети медленные. Как мы можем проверить, не существует ли один символ в каком-либо одном файле –

+0

Вы хотите найти конкретный символ или просто найти файл с несогласованным характером? –

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

  • Нет связанных вопросов^_^