나는 2 개의 Excel 문서를 가지고 있으며 파일 이름을 제외하고 정확히 동일한 지 확인하고 싶습니다.
예를 들어, 파일은 fileone.xls
및 이라고 filetwo.xls
합니다. 파일 이름 외에도 내용은 동일하다고 가정하지만 이것이 확인하려는 것입니다.
나는 많은 플러그인을 설치하지 않고 이것을 검토하는 방법을 찾고있었습니다. 똑 바른 방법은 없습니다.
두 파일 모두에 대해 MD5 해시를 생성하려고했습니다. 해시가 동일하면 파일 내용이 1 : 1 동일하다는 의미입니까?
답변
해시가 동일하면 파일 내용이 1 : 1 동일하다는 의미입니까?
모든 파일은 바이트 모음입니다 (값 0-255). 두 파일 MD5 해시가 일치하면 해당 바이트 모음이 모두 정확히 같은 순서 (같은 순서, 동일한 값) 일 가능성이 큽니다.
두 파일이 128 비트 해시 인 동일한 MD5를 생성 할 가능성은 매우 적습니다. 확률은 다음과 같습니다.
실수 충돌 두 해시 확률이 1/2 인 128 1 sextillion decillion nonillion 366 920 938 octillion septillion undecillion 463 282 340 456 463 211,000 374 quintillion 천조 607,000,000,000,000 431,000,000,000 768,000,000 (에 응답으로부터 StackOverflow에 ).
해시는 “한 방향으로 만”작동합니다. 즉, 바이트 컬렉션을 가져와 해시를 얻지 만 해시를 가져 와서 바이트 컬렉션을 다시 가져올 수는 없습니다.
암호화는 이것에 달려 있습니다 (두 가지가 무엇인지 모른 채 비교할 수있는 한 가지 방법입니다).
2005 년 무렵, MD5 해시 를 가져와 해당 해시와 일치하는 데이터를 생성하는 방법이 발견되어 동일한 MD5 해시 ( 충돌 공격 ) 를 가진 두 개의 문서를 만듭니다 . 아래 @ user2357112의 의견을 참조하십시오. 즉, 공격자는 예를 들어 동일한 MD5를 가진 두 개의 실행 파일을 만들 수 있으며, 신뢰할 수있는 대상을 결정하기 위해 MD5에 의존하는 경우 속일 수 있습니다.
따라서 MD5를 암호화 또는 보안에 사용해서는 안됩니다. 예를 들어 다운로드 무결성을 보장하기 위해 다운로드 사이트에 MD5를 게시하는 것은 좋지 않습니다. MD5 해시에 따라 파일 또는 데이터 내용을 확인하기 위해 스스로 생성하지 않은 것은 피해야합니다.
자신을 생성하면 자신에게 악의적이지 않다는 것을 알고 있습니다. 따라서 사용할 수는 있지만 다른 사람이 그것을 복제하고 MD5 해시를 공개적으로 게시하려면 더 나은 해시를 사용해야합니다.
두 개의 Excel 파일이 동일한 행과 열에 동일한 값을 포함 할 수 있지만 형식, 스타일, 설정 등으로 인해 파일의 바이트 스트림이 완전히 다를 수 있습니다.
파일의 데이터를 비교하려면 먼저 동일한 행과 열을 사용하여 CSV로 내보내고 모든 서식을 제거한 다음 CSV를 해시하거나 비교하십시오.
답변
실제로, 동일한 암호화 해시는 파일이 공격 자나 다른 악의적 인 엔티티에 의해 제작되지 않는 한 파일이 동일하다는 것을 의미합니다 . 잘 설계된 암호화 해시 기능과 의 임의 충돌 가능성은 실제로 공격자가 없을 때 무시할 정도로 작습니다.
그러나 일반적으로, 아니, 우리는 같은 해시를 갖는 2 개 개의 임의의 파일이 있다고 말할 수 없다 확실히 그들이 동일하다는 것을 의미한다.
암호화 해시 함수의 작동 방식은 임의 길이의 입력을 가져 와서 입력에서 계산 된 고정 길이 값을 출력하는 것입니다. 일부 해시 함수에는 선택할 수있는 여러 출력 길이가 있지만 출력은 여전히 고정 길이 값입니다. 이 값은 최대 수십 바이트입니다. 오늘날 가장 일반적으로 사용되는 출력 값이 가장 긴 해시 알고리즘에는 512 비트 출력이 있고 512 비트 출력은 64 바이트입니다.
해시 함수의 입력이 해시 함수의 출력보다 긴 경우 입력이 출력에 적합하도록 일부 충실도를 제거해야합니다. 결과적으로 출력 길이보다 큰 길이의 입력이 여러 개 있어야 동일한 출력을 생성 할 수 있습니다.
현재 주력 SHA-256을 예로 들어 봅시다. 256 비트 또는 32 바이트의 해시를 출력합니다. 정확히 32 바이트 길이이지만 서로 다른 두 개의 파일이있는 경우 파일의 내용에 상관없이 알고리즘에 결함이 없다고 가정하여 다른 값으로 해시해야합니다. 수학적 용어로, 해시는 2256 입력 공간을 2256 출력 공간 에 맵핑하는 함수 이며, 충돌없이 가능합니다. 각 33 바이트 두 개의 파일이있는 경우,이 존재해야합니다 몇 가지 우리가 지금이 매핑하고 있기 때문에, 두 파일 모두에 대해 동일한 32 바이트 출력 해시 값을 제공 입력의 조합을 264 2에 입력 공간 (256)출력 공간; 여기서 우리는 평균적 으로 모든 단일 출력에 대해 2 8 개의 입력 이 존재한다는 것을 쉽게 알 수 있습니다 . 더 나아가서 64 바이트 파일 을 사용하면 모든 단일 출력에 대해 2256 개의 입력 이 있어야합니다 !
암호화 해시 함수는 특정 출력을 제공하는 입력을 작성하거나 동일한 출력을 제공하는 두 개의 입력을 작성하는 것이 계산 상 어렵 도록 설계되었습니다 . 이를 사전 이미지 공격 저항 또는 충돌 공격 저항이라고 합니다. 이러한 충돌을 찾는 것은 불가능 하지 않습니다 . 그것은 정말로, 정말로, 정말로, 정말로 힘들 도록 의도 된 것 입니다. 충돌 공격의 특별한 경우는 생일 공격 입니다.
공격에 저항하는 알고리즘은 다른 알고리즘보다 낫습니다. MD5는 일반적으로 요즘 완전히 고장난 것으로 여겨지지만, 마지막으로 보았지만 여전히 첫 번째 사전 이미지 저항력을 보여주었습니다 . SHA-1도 마찬가지로 효과적으로 고장납니다. 사전 이미지 공격은 시연되었지만 특정 조건이 필요하지만 그 경우가 무기 한일 것이라고 믿을 이유는 없습니다. 그 말이 다가올수록 공격은 항상 좋아지고 결코 나 빠지지 않습니다. SHA-256 / 384 / 512는 현재 대부분의 목적에 안전하다고 여전히 믿고 있습니다. 그러나 악의적으로 제작되지 않은 두 가지가 유효한지 확인하려는 경우파일은 동일합니다. 입력 공간이 이미 충분히 제한되어 있기 때문에 대부분 랜덤 충돌에 관심이 있기 때문입니다. 파일이 악의적으로 제작되었다고 믿을만한 이유가 있다면 최소한 안전하다고 여겨지는 암호화 해시 함수를 사용해야합니다.
첫 번째 사전 이미지는 특정 출력 해시 값을 생성하는 입력을 찾는 것입니다. 두 번째 사전 이미지는 지정된 다른 입력과 동일한 출력을 제공하는 입력을 찾는 것입니다. 충돌 은 입력이 무엇인지, 때로는 입력이 무엇인지에 관계없이 동일한 출력을 생성하는 두 개의 입력을 찾는 것입니다.
그러나 파일이 매우 다른 데이터 표현을 가질 수 있으며 여전히 똑같이 표시 될 수 있음 을 명심 해야합니다. 따라서 암호화 해시가 일치하지 않아도 동일 하게 보일 수 있지만 해시가 일치 하면 동일하게 나타날 가능성이 큽니다 .
답변
그것은 확률 게임이다 … 해시는 유한 한 수의 값을 나타낼 수있다.
가정적인 (매우 약한) 8 비트 해싱 알고리즘을 고려하면 256 개의 고유 한 값을 나타낼 수 있습니다. 알고리즘을 통해 파일을 실행하기 시작하면 해시가 시작되기 시작하지만 얼마 지나지 않아 ” 해시 충돌 “이 표시됩니다. 이는 두 개의 서로 다른 파일이 알고리즘에 제공 되었으며 출력 과 동일한 해시 값 을 생성했음을 의미합니다 . 분명히 여기서 해시는 충분히 강하지 않으며 ” 해시가 일치하는 파일의 내용이 같다 “고 주장 할 수 없습니다 .
해시 크기를 확장하고 더 강력한 암호화 해싱 알고리즘을 사용하면 충돌을 줄이는 데 크게 도움이되고 동일한 해시를 가진 두 파일의 내용이 동일하다는 확신을 높일 수 있습니다.
이것은 우리가 100 %의 확실성에 도달 할 수 없다, 말했다 – 우리가 주장 할 수 없다 확실히 동일한 해시를 가진 두 개의 파일이 진정으로 동일한 내용이 있는지 확인하십시오.
대부분의 / 많은 상황에서 이것은 문제가되지 않으며 해시를 비교하는 것은 ” 충분히 좋은 “것이지만 이는 위협 모델에 따라 다릅니다.
궁극적으로 확실성 수준을 높여야 할 경우 다음을 수행하는 것이 좋습니다.
- 강력한 해싱 알고리즘 사용 ( 악의적 인 사용자로부터 보호해야하는 경우 MD5 는 더 이상 적절한 것으로 간주되지 않음)
- 여러 해싱 알고리즘 사용
- 파일 크기 비교-추가 데이터 포인트는 잠재적 충돌을 식별하는 데 도움이 될 수 있지만 입증 된 MD5 충돌 은 데이터 길이를 변경할 필요가 없습니다.
100 % 확실해야하는 경우 반드시 해시로 시작하지만 해시가 일치하면 두 파일의 바이트 별 비교를 수행하십시오.
또한 다른 사람들이 지적한 것처럼 Word 및 Excel과 같은 응용 프로그램에서 생성 된 문서의 복잡성은 텍스트, 숫자, 보이는 레이아웃이 동일하지만 파일에 저장된 데이터는 다를 수 있음을 의미합니다.
Excel은 특히이 점이 좋지 않습니다. 스프레드 시트를 저장하면 아무것도 수행 하지 않고 단순히 내용이 다른 새 파일을 생성 할 수 있습니다.
답변
두 파일이 동일한 MD5 해시를 가지고 있고 특별히 제작되지 않은 경우 동일합니다. 같은 MD5 해시로 파일을 만드는 것이 얼마나 어려운지는 파일 형식에 따라 다르며 Excel 파일을 사용하는 것이 얼마나 쉬운 지 모르겠습니다.
따라서 주위에 누워 있고 중복을 찾으려고하는 파일이 있으면 MD5가 안전합니다. 파일 중 하나를 작성했고 다른 파일이 모호한 출처 인 경우 MD5는 여전히 안전합니다 (동일한 MD5 체크섬으로 다른 파일을 얻는 유일한 방법은 두 파일을 모두 만드는 것입니다). 신뢰할 수없는 사람이 예산 제안서를 보낸 후 나중에 동일한 파일이라고 주장하는 다른 파일을 보내면 MD5로는 충분하지 않을 수 있습니다.
위험을 피하려면 MD5 대신 SHA-256 또는 SHA-512를 사용하십시오. 두 파일의 SHA-256 해시가 동일하면 동일합니다. SHA-512도 마찬가지입니다. (이들과 다를 수 있다는 이론적 인 가능성이 있지만 실수로 발생할 수있는 가능성은 검증 과정에서 컴퓨터가 조금만 뒤집어 질 가능성과는 관련이없는 것보다 훨씬 적습니다. 같은 해시, 아무도 SHA-256 또는 SHA-512에 대해이 작업을 수행하는 방법을 모릅니다.)
두 Excel 파일에 서로 다른 해시가 있으면 서로 다르지만 그 차이를 알 수있는 방법은 없습니다. 데이터는 동일하지만 형식이 다를 수 있거나 속성이 다르거 나 다른 버전으로 저장되었을 수 있습니다. 실제로 Excel이 Word와 같은 경우 파일을 저장하면 메타 데이터가 업데이트됩니다. 숫자 및 텍스트 데이터 만 비교하고 서식 및 속성을 무시하려는 경우 스프레드 시트를 CSV로 내 보내서 비교할 수 있습니다.
유닉스 / 리눅스 도구를 사용할 수있는 경우 cmp
두 파일을 비교 하는 데 사용할 수 있습니다 . 동일한 시스템에서 두 파일을 비교하기 위해 체크섬은 작업을 더욱 복잡하게 만듭니다.
답변
짧은 대답은 : 암호화 해시는 당신이 일치하는 해시와 파일이 같은 것을 합리적으로 확신 할 수 있도록되어있다. 의도적으로 제작되지 않은 경우 비슷한 해시 값을 가진 두 개의 약간 다른 파일의 가능성은 엄청나게 작습니다. 그러나 의도적으로 변경 될 수있는 파일을 비교하고 확인하는 데있어 MD5는 적합하지 않습니다. SHA3 또는 BLAKE2와 같은 다른 해시 함수를 사용하십시오.
긴 대답 : 이상적인 해시 함수는 모든 고유 한 데이터 조각에 대해 거의 고유 한 암호화 해시를 만드는 기능입니다. 다시 말해, 우리는이 우주에 해시 값이 충돌하는 두 개의 파일이 있다는 것을 확실히 알고 있습니다.이 두 파일이 자연스럽게 함께 올 확률은 엄청나게 작습니다.
10 년 전에 저는 MD5에서 가능한 한 멀리 있어야한다고 결정했습니다. (물론, 어제까지는 그렇게하는 데 대한 잘못된 이유를 기억했습니다. 10 년은 오래 걸렸습니다. 당신은 그 이유를 기억하기 위해 과거의 메모를 다시 보았습니다.이 대답을 편집 한 1996 년에) MD5가 발견되었습니다. 충돌 공격에 취약합니다. 9 년 후, 연구원들은 동일한 해시로 PostScript 문서와 X.509 인증서 쌍을 만들 수있었습니다! MD5가 분명히 깨졌습니다. (Megaupload.com도 MD5를 사용하고 있었고 해시 충돌과 관련하여 많은 문제가있어 당시 문제가 발생했습니다.)
따라서 MD5는 양성 파일을 비교할 수 있지만 신뢰할 수는 있지만 완전히 사용을 중단해야한다고 결론을 내 렸습니다. MD5 해시를 사용하여 파일을 비교하기 시작하면 언젠가는 보안 지문을 잊어 버리고 의도적으로 동일한 해시를 갖도록 제작 된 두 파일을 비교합니다. 또한 CPU와 암호화 프로세서는 이에 대한 지원을 추가하지 않았을 것입니다.
그러나 원래 포스터는 MD5를 사용해야 할 이유가 훨씬 적습니다.
- 하나가 두 파일 만 비교하는 한, 바이트 단위 비교는 실제로 자체 MD5 해시를 생성하는 것보다 빠릅니다. 세 개 이상의 파일을 비교해 보면 … 이제 합법적 인 원인이 있습니다.
- OP는 “다양한 플러그인을 설치하지 않고이를 검토하는 방법”을 지정했습니다. Windows PowerShell의 Get-FileHash 명령은 SHA1, SHA256, SHA384, SHA512 및 MD5 해시를 생성 할 수 있습니다. SHA 해시 기능을 하드웨어 지원하는 최신 컴퓨터에서는 생성 속도가 더 빠릅니다.
답변
나는 2 개의 Excel 문서를 가지고 있으며 파일 이름을 제외하고 정확히 동일한 지 확인하고 싶습니다.
실제적인 관점에서, 파일이 다른지 알아 내기 위해 파일을 직접 비교하는 것은 각 파일의 해시를 계산 한 다음 해시를 비교하는 것보다 빠릅니다.
해시를 계산하려면 두 파일의 내용을 모두 읽어야합니다.
직접 비교를 통해 동일한 지 확인하려면 두 파일의 내용이 일치하지 않을 때까지만 읽으면됩니다. 차이점을 찾으면 파일이 동일하지 않으며 두 파일에서 더 이상 데이터를 읽을 필요가 없다는 것을 알게됩니다.
두 가지 중 하나를 수행하기 전에 두 파일의 크기를 간단히 비교할 수 있습니다. 크기가 다르면 내용이 같을 수 없습니다.
답변
MD5 또는 SHA와 같은 해시는 길이가 고정되어 있으며 300 개의 영숫자 문자 (실제로 짧고 전체 영숫자 문자 세트를 사용하지 않음)라고합니다.
파일은 영숫자로 구성되며 최대 2GB 크기입니다.
가능한 해시 값보다 더 많은 파일 (최대 2GB 크기)이 있음을 쉽게 알 수 있습니다. 비둘기 구멍 원리는 일부 (다른) 파일은 동일한 해시 값을 가져야한다고 말합니다.
또한 shattered.io 1에서 설명한 것처럼 shattered.io/static/shattered-1.pdf와 sha-1 해시 값이 동일한 shattered.io/static/shattered-2.pdf의 두 가지 파일을 가질 수 있습니다. 완전히 다릅니다.
1 SHA1은 md5보다 “강력한”해싱 알고리즘입니다