개발 생산성 · XNTLAB BLOG

같은 문장인데 해시가 다른 이유: UTF-8과 줄바꿈

해시는 문장의 뜻이 아니라 입력 바이트를 대상으로 계산합니다. 눈으로 같은 단어처럼 보여도 끝 줄바꿈·공백·인코딩·파일 메타데이터가 달라지면 해시도 달라질 수 있습니다. 파일 동일성을 검사할 때 원문을 어느 방식으로 읽었는지 함께 기록해야 합니다.

작성 XNTLAB 발행 2026.10.03 수정 2026.10.03
같은 문장인데 해시가 다른 이유: UTF-8과 줄바꿈의 입력·처리·검산 설명도

해시는 문장의 뜻이 아니라 입력 바이트를 대상으로 계산합니다. 눈으로 같은 단어처럼 보여도 끝 줄바꿈·공백·인코딩·파일 메타데이터가 달라지면 해시도 달라질 수 있습니다. 파일 동일성을 검사할 때 원문을 어느 방식으로 읽었는지 함께 기록해야 합니다.

텍스트를 바이트로 바꾸는 과정

브라우저 도구는 텍스트 입력을 TextEncoder로 UTF-8 바이트로 바꾼 뒤 SHA 알고리즘에 넣습니다. 파일을 선택하면 텍스트 변환을 하지 않고 파일 바이트를 그대로 읽습니다. 화면에 표시된 이름과 파일 내부 내용은 다른 데이터이므로 이름이 같다고 해시가 같지는 않습니다.

문자열 abc에는 끝 줄바꿈이 없습니다. 에디터에서 파일을 저장하면 끝 줄바꿈을 넣는 설정이 있을 수 있고 Windows의 CRLF와 다른 시스템의 LF가 다를 수 있습니다. 로그나 코드에 나온 표준 예제를 비교할 때도 이런 입력 차이가 결과를 바꾸는지 확인해야 합니다.

입력 A: abc
입력 B: abc + LF(0x0A)
입력 C: abc + CRLF(0x0D 0x0A)
뜻은 비슷하지만 바이트가 달라 해시도 달라짐

abc의 SHA-256으로 엔진 확인

표준적으로 알려진 abc의 SHA-256 값은 아래와 같습니다. 브라우저의 해시 도구에서 파일을 선택하지 않고 정확히 abc를 입력해 결과를 비교할 수 있습니다. 자동 브라우저 검증에서도 UTF-8 abc 파일의 SHA-256 결과가 같은 값인지 확인했습니다.

파일 입력이 선택된 상태라면 텍스트 입력보다 파일이 우선합니다. abc를 적었는데 다른 결과가 나온다면 이전 파일 선택이 남아 있지 않은지 먼저 확인하세요. 결과에는 선택한 알고리즘과 입력 파일명이 함께 표시되므로 비교 기준을 놓치지 않도록 했습니다.

SHA-256(UTF-8 abc)
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

해시가 증명하는 것과 못 하는 것

두 파일의 같은 알고리즘 해시를 비교하면 바이트가 같은지 확인하는 데 도움이 됩니다. 그러나 다운로드 페이지 자체가 공격자에게 바뀌었다면 파일과 해시를 둘 다 바꿀 수 있습니다. 배포자의 서명이나 신뢰할 수 있는 별도 채널을 검토하는 이유입니다.

SHA 해시를 만드는 기능은 비밀번호를 안전하게 저장하는 기능이 아닙니다. 비밀번호는 전용 비밀번호 해싱·솔트·작업 비용 정책이 필요합니다. 파일의 무결성 비교와 사용자 인증 설계를 혼동하지 말고 각 목적에 맞는 도구와 공식 문서를 선택하세요.

파일 비교 작업에 적용하기

원본과 전달본을 같은 알고리즘으로 계산하고 크기와 해시를 함께 기록합니다. 내용이 달라졌다면 이름·확장자가 아니라 실제 저장 바이트를 확인합니다. PDF 재저장이나 이미지 변환은 화면이 같아 보여도 메타데이터·압축·서식 때문에 바이트가 달라질 수 있습니다.

파일이 큰 경우 브라우저의 Web Crypto 호출은 입력 바이트를 메모리에 올립니다. 도구는 50MB 제한을 표시하고 더 큰 파일을 처리하는 전용 스트리밍 도구와 범위를 구분합니다. 오류가 나면 같은 입력을 계속 반복해 메모리를 소모하기보다 파일 크기와 브라우저 상태를 확인하세요.

업무 기록에 실제 파일 내용이나 비밀정보를 첨부할 필요는 없습니다. 파일명·크기·알고리즘·해시·확인 날짜를 남기면 전달 뒤 변경 여부를 대조할 수 있습니다. 다만 파일명이 고객을 식별하는 경우에는 기록의 접근 권한도 제한해야 합니다. 비교한 사실과 파일의 안전성을 보증하는 주장을 구분하는 것이 중요합니다.

출처와 적용 환경

Web Crypto API와 UTF-8 입력의 바이트 비교 예제입니다. 파일의 악성코드 여부나 배포자의 신뢰성을 검사한 결과는 아닙니다.

작성·편집: XNTLAB · 정정 제안: 문의하기

지금 확인하기

SHA 해시 생성기 바로가기