2017-02-18 4 views
-1

동일한 수의 파일이있는 두 대의 컴퓨터가 있습니다. 한 컴퓨터에있는 파일 중 하나에 약간의 변경이 있는지 어떻게 알 수 있습니까? 이 컴퓨터간에 네트워크 통신이 매우 느립니다.두 대의 컴퓨터에있는 파일의 차이

답변

0

파일을 해시하고 네트워크를 통해 해시를 비교할 수 있습니다.

좋은 해시 함수는 함수의 입력에 약간의 차이가있을 경우 출력이 완전히 달라 지도록 설계되었습니다. 게다가 대부분의 해시 함수는 현재 160-512 비트의 출력 길이를 가지고 있습니다. 비록 몇 기가 바이트 인 두 파일을 비교하기를 원할지라도 해시가 일치하는지 확인하기 위해 네트워크를 통해 512 비트의 작은 문자열을 보내면됩니다.

수백만 개의 파일이있는 경우이 파일이 이미 많이 있습니다. 해결책은 다음과 같을 것이다 :

  1. 해시 각 파일을 각 컴퓨터에
  2. 그런 다음 당신이 차이가 있다는 것을 알고 다른 경우 다시
  3. 지금이 출력을 비교 해시을 연결하고, 연결된 문자열을 해시 그 파일들.
  4. 바이너리 검색을 사용할 수있는 파일 (또는 파일에있는 정확한 위치)을 찾으려면
  5. 수백만 개의 파일을 두 부분으로 나눕니다. 이제 1-3 단계로 이동하십시오. 충분한 공간이 있으면 속도를 높이기 위해 각 파일의 해시 저장).
  6. 다른 두 해시가 각각 4-6 단계로 재귀 적으로 이동합니다.
  7. 다른 파일을 찾은 경우 다시 파일을 줄 수만큼 분할하여 4-6과 같이 작업 할 수 있습니다.
  8. 어떤 시점에서 해시 수가 줄의 실제 내용보다 길어질 수있는 정도의 줄 수가 있습니다. 이제 순진한 방식으로 실제 내용을 비교하는 것이 더 효율적입니다.

다른 파일이 하나만 있다고 가정하면 네트워크를 통해 많은 로그를 보내고 네트워크 트래픽을 최소화해야합니다.

+0

감사합니다 ... 좀 정교 해 주실 수 있습니까? 웹 보안과 관련된 직책에 대해 인터뷰에서이 질문에 대한 질문을 받았습니까? (분명히 맞지 않습니다.) 두 시스템에서 수백만 개의 파일이 있고 네트워크가 느립니다. 한 파일에 한 문자가 잘못되었는지 확인하는 방법 –

+0

@VivekKumar 내 편집 참조 –

0

하나의 아이디어는 각 파일에 대해 해시를 생성하는 것입니다. 해시는 임의 길이의 파일을 고정 크기로 변환합니다. 해시를 함께 해시 한 다음 업로드하고 비교할 수 있습니다. 해싱은 다운로드가 손상되지 않도록 광범위하게 사용되는 것입니다.

+0

감사합니다. 제발 조금 정교하게 부탁 해요 웹 보안과 관련된 직책에 대한 인터뷰에서이 질문에 대한 질문을 받았습니다 (분명히 맞지 않습니다). 질문을 바꿔 보겠습니다. 두 시스템에서 수백만 개의 파일이 있고 네트워크가 느립니다. 한 파일에 한 문자가 있는지 확인하는 방법 –

+0

특정 문자를 찾거나 파일을 찾고 싶습니까? 잘못 정렬 된 문자가 있습니까? –