복사한 파일이 같은지, 이름 대신 해시로 대조하세요
작은 예제 파일로 사본의 바이트 일치와 내용 검수의 차이를 확인합니다.
목차
파일을 복사한 뒤 이름과 화면이 같아 보여도 어느 원본과 어떤 사본을 비교했는지 먼저 정해야 합니다. 파일 해시는 바이트 내용을 요약한 값으로 사본을 대조할 때 쓸 수 있지만, 그 파일이 올바른 자료이거나 안전한 실행 파일이라는 뜻은 아닙니다. 여기서는 개인정보 없는 작은 자작 파일만 읽어봅니다.
먼저 비교할 파일 두 개 정하기
연습 JSON 받기는 Egorae가 만든 가상 메모 두 개입니다. 실제 앱 내보내기나 사용자 자료가 아닙니다. 받은 파일을 새 연습 폴더에 두고 운영체제의 파일 복사 기능으로 사본 하나를 만드세요. 원본을 편집하거나 실제 백업을 지우지 않습니다.
파일 이름이 같은 다른 폴더를 혼동하지 않도록 각각의 전체 위치를 확인합니다. 브라우저가 내려받은 이름 뒤에 번호를 붙였다면 실제 저장 이름을 사용하세요. 아래 명령은 두 파일을 비교하는 마법 같은 도구가 아니라 한 파일씩 읽어 해시를 출력하는 예입니다. 두 번 실행할 때 파일 경로를 구분해야 합니다.
Python으로 작은 파일 읽기
이미 Python 3가 설치된 환경에서만 진행합니다. 명령을 실행할 터미널이 익숙하지 않다면 여기서 설치나 설정을 바꾸지 말고 양식에 미확인으로 남겨도 됩니다. 큰 파일은 이 예제의 범위가 아닙니다. read_bytes()는 파일 전체를 메모리에 읽습니다.
연습 폴더에서 다음 한 줄을 실행합니다. 파일 이름은 실제 받은 이름에 맞춰 바꿉니다.
python3 -c "from pathlib import Path; import hashlib; p=Path('notes-example.json'); print(p.resolve()); print(hashlib.sha256(p.read_bytes()).hexdigest())"
이 명령은 경로와 SHA-256 값을 출력하며 파일을 쓰거나 실행하지 않습니다. 사본 이름을 넣어 다시 실행하고 두 출력의 알고리즘과 값 전체를 비교하세요. 앞 몇 글자만 같다는 것은 일치 판정이 아닙니다. 오류가 나면 파일 없음·접근 불가·명령 환경을 구분하고 결과를 만들어 채우지 않습니다.
Python 공식 문서는 해시 객체에 바이트 데이터를 넣고 hexdigest()로 문자열 표현을 얻는 방식을 설명합니다. 이 글의 명령과 기록 양식은 그 API를 이용해 만든 Egorae 예제입니다. hashlib 공식 문서.
같은 사본과 수정한 사본 비교
원본은 그대로 두고 추가 연습 사본의 메모 제목 한 글자만 바꿔 저장해봅니다. 같은 파일을 다시 저장했다고 생각해도 편집기가 줄바꿈이나 인코딩을 바꿀 수 있으므로, 무엇을 바꾸었는지 적어둡니다. 다시 해시를 구해 원본과 비교합니다.
| 비교 | 이 연습의 예상 관찰 | 해석하지 말아야 할 것 |
|---|---|---|
| 원본과 그대로 복사한 사본 | 해시 일치 | 내용이 업무상 정답이라는 보장 |
| 원본과 제목을 수정한 사본 | 해시 불일치 | 어느 파일이 더 최신인지 자동 판정 |
| 원본과 다른 형식으로 내보낸 파일 | 일치하지 않을 수 있음 | 불일치만으로 복원 실패 확정 |
Egorae는 제공 JSON을 임시 폴더에 그대로 복사한 경우의 바이트·SHA-256 일치와, 사본의 한 바이트를 바꾼 경우의 불일치를 Python으로 확인했습니다. 실제 클라우드 동기화·모든 편집기·파일 포맷 변환을 시험한 결과는 아닙니다. 자신의 파일에서 확인한 결과와 이 작은 예제의 결과는 구분해 기록합니다.
해시가 달랐을 때 멈출 지점
다르다는 것은 대조한 바이트가 같지 않다는 신호입니다. 그 이유가 손상인지, 정상적인 편집인지, 다른 버전을 골랐는지는 이 값만으로 알 수 없습니다. 우선 두 경로와 크기, 생성·수정 과정을 확인하고 원본을 보존한 채 내용을 열어 차이를 살펴보세요. 해시를 맞추려고 정상 내용을 지우지 않습니다.
반대로 값이 같아도 필요한 첨부를 전부 선택했는지, 앱에서 불러올 수 있는지, 링크가 살아 있는지는 별도입니다. 해시 충돌 가능성을 무시한 수학적 동일성 증명으로도 표현하지 않습니다. 배포 파일의 진위를 판단하려면 신뢰할 수 있는 게시자가 제공한 기준값인지도 중요하며, 파일과 함께 받은 정체 불명 해시만으로 출처가 검증되지는 않습니다.
민감한 파일을 온라인 해시 사이트에 올릴 필요는 없습니다. 이 연습은 로컬에서 파일을 읽는 방식입니다. 암호화·악성코드 검사·백업 성공 인증으로 범위를 넓히지 않습니다.
대조 기록 남기기
원본 경로 / 사본 경로:
대조 알고리즘 / 실행한 도구:
원본 값 / 사본 값:
일치·불일치·미확인:
변경한 내용 / 파일 변환 여부:
별도 확인할 본문·첨부·불러오기:
해시 일치는 백업 대조표 작성기의 관찰 메모에 남길 수 있지만 모든 칸을 성공으로 바꾸는 근거는 아닙니다. JSON 안의 항목과 빈 값까지 확인하려면 JSON 값 읽기 연습으로 이어가세요. 사본 검증은 원본 삭제 허가가 아닙니다.
확인한 자료
- https://docs.python.org/3.14/library/hashlib.html · 확인 2026-10-21