해시 생성기
영상 분석 서비스를 만들다가 같은 영상이 계정만 바꿔 반복해서 올라오는 걸 발견했습니다. 파일명은 20240301_final.mp4, intro_v2.mp4 제각각이고 용량도 재인코딩 때문에 몇 바이트씩 달랐죠. 사람 눈엔 똑같은 영상인데 메타데이터로는 도무지 같은 파일이라고 묶을 방법이 없었습니다. 결국 파일 내용 자체를 지문처럼 뽑아 비교하기로 했고, 그때 쓴 게 해시입니다. 해시 생성기는 텍스트나 파일을 넣으면 MD5·SHA-256 같은 고정 길이 지문값을 만들어 주는 도구입니다.
계산은 전부 브라우저 안에서 끝납니다. 큰 영상 파일을 올려도 서버로 전송되지 않으니, 원본을 어딘가에 흘릴 걱정 없이 지문만 뽑아 비교할 수 있습니다.
사용 방법
지원하는 알고리즘
한 번 넣으면 MD5, SHA-1, SHA-256, SHA-384, SHA-512 다섯 가지 해시값이 동시에 나옵니다. 알고리즘을 따로 고를 필요 없이 결과 목록에서 필요한 걸 골라 쓰면 됩니다. 출력은 HEX가 기본이고, 필요하면 BASE64로 바꾸거나 hex를 대문자로 전환할 수 있습니다.
-
위쪽에서 INPUT(텍스트)과 FILE(파일) 중 입력 방식을 고릅니다. 영상이나 이미지의 지문을 뽑을 때는 FILE, 문자열을 확인할 때는 INPUT입니다. 텍스트 칸에 파일을 그냥 끌어다 놓아도 자동으로 파일 모드로 넘어갑니다.

-
텍스트 모드면 입력창에 문자열을 붙여넣고, 파일 모드면 파일을 클릭하거나 드래그해서 올립니다. 뭘 넣을지 막막하면 샘플 버튼으로 시작해도 됩니다. 모든 파일 형식을 받습니다.

-
아래에 알고리즘별 해시값이 나옵니다. 각 줄 끝의 복사 버튼으로 원하는 값만 집어 가면 됩니다. 옆에 계산에 걸린 시간도 표시돼서 큰 파일이 얼마나 걸렸는지 눈으로 확인됩니다.

파일 해시로 중복 영상을 어떻게 가려낼까
해시는 파일을 바이트 단위로 처음부터 끝까지 읽어서, 그 내용을 정해진 길이의 짧은 값 하나로 압축합니다. SHA-256이면 파일이 1KB든 4GB짜리 영상이든 결과는 언제나 64자리 16진수 하나로 나오죠. 내용이 완전히 똑같은 두 파일은 반드시 같은 해시가 나오고, 반대로 해시가 같으면 사실상 같은 파일로 봐도 됩니다.
여기서 핵심은 민감도입니다. 영상 끝에 프레임 하나가 추가되거나 픽셀 한 점의 색이 바뀌면, 그 한 바이트 차이만으로 해시 전체가 앞뒤 없이 완전히 다른 값으로 튑니다. 그래서 "비슷한" 파일을 뭉뚱그려 잡아 주진 않습니다. 재인코딩으로 화질이 살짝 달라진 영상은 사람 눈엔 같아도 바이트가 다르니 다른 해시가 나오죠. 해시로 걸러지는 건 어디까지나 바이트가 완전히 일치하는 순수 중복입니다. 그 이상, 재인코딩·자막 삽입까지 잡으려면 지각 해시(perceptual hash)처럼 다른 방식을 얹어야 합니다. 파일명이 달라도 원본을 그대로 다시 올린 경우라면, 업로드 시점에 해시를 뽑아 기존 값과 대조하는 것만으로 대부분의 중복 업로드가 걸러집니다.
개발하다 파일 해시가 필요해지는 순간들
가장 흔한 건 방금 얘기한 중복 업로드 차단입니다. 파일을 저장할 때 해시를 같이 기록해 두고, 새 업로드가 들어오면 먼저 해시부터 비교하면 됩니다. 같은 파일을 두 번 저장할 이유가 사라지죠.
무결성 검증도 자주 나옵니다. 배포 서버에서 큰 파일을 받았는데 중간에 잘렸는지, 전송 중 깨졌는지 확인하고 싶을 때 제공된 SHA-256 값과 직접 계산한 값을 맞춰 보면 됩니다. 리눅스 배포판이나 라이브러리를 받으면 페이지에 해시가 같이 적혀 있는 것도 이 때문입니다. 값이 한 글자라도 다르면 받은 파일을 믿으면 안 됩니다.
캐시 키나 CDN의 콘텐츠 주소로도 씁니다. 파일 내용의 해시를 그대로 파일명이나 키로 삼으면, 내용이 바뀌지 않는 한 같은 주소를 가리키니 캐시가 자연스럽게 재사용되고 내용이 바뀌면 주소도 자동으로 갈립니다.
한 가지 주의할 점은 알고리즘 선택입니다. MD5와 SHA-1은 서로 다른 파일이 같은 해시를 갖도록 의도적으로 만들어 내는 공격이 이미 실증돼서, 비밀번호 저장이나 서명 검증 같은 보안 용도로는 쓰면 안 됩니다. 반면 지금처럼 악의 없는 파일들 사이에서 우연한 중복을 빠르게 걸러 내는 용도라면 여전히 실용적입니다. 남이 조작한 파일까지 방어해야 하는 상황이면 SHA-256 이상을 쓰세요.