해시란 무엇인가요
해시(hash)는 길이가 얼마든 상관없이 데이터를 정해진 길이의 값으로 요약하는 계산입니다. 같은 입력은 언제나 같은 값을 내고, 입력이 조금만 달라도 값 전체가 달라집니다. 결과에서 원래 데이터를 되살릴 수는 없습니다.
텍스트 칸에 hello를 넣으면 SHA-256은 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824입니다. 첫 글자만 대문자로 바꾼 Hello는 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969로, 앞의 값과 닮은 구석이 없습니다. 이 성질 덕분에 해시값 두 개만 견주어도 두 데이터가 같은지 알 수 있습니다. 이렇게 확인용으로 쓰는 해시값을 체크섬이라고도 부릅니다.
사용 방법
- 입력 방식에서 “텍스트”와 “파일” 중 하나를 고릅니다. 텍스트는 “해시를 계산할 텍스트” 칸에 넣고, 파일은 끌어다 놓거나 선택합니다. 파일 형식에는 제한이 없습니다.
- 계산할 알고리즘에서 필요한 것을 켭니다. 버튼을 누를 때마다 켜지고 꺼지며, 여러 개를 함께 켤 수 있습니다. 모두 끄면 “알고리즘을 하나 이상 선택하세요.“라는 안내가 나옵니다.
- 표기 방식에서 “16진수 (소문자)”, “16진수 (대문자)”, “Base64” 중 하나를 고릅니다.
- 해시 결과에 켜 둔 알고리즘마다 한 줄씩 값이 나옵니다.
- 비교할 값이 있으면 예상 해시값과 비교 칸에 붙여넣습니다.
| 알고리즘 | 해시 길이 | 16진수 자릿수 | 처음부터 켜져 있음 |
|---|---|---|---|
| MD5 | 128비트 | 32 | 예 |
| SHA-1 | 160비트 | 40 | 예 |
| SHA-256 | 256비트 | 64 | 예 |
| SHA-384 | 384비트 | 96 | 예 |
| SHA-512 | 512비트 | 128 | 예 |
| SHA3-256 | 256비트 | 64 | 아니요 |
| BLAKE3 | 256비트 | 64 | 아니요 |
SHA3-256은 SHA-256과 길이가 같지만 SHA-2와 다르게 설계된 SHA-3 계열이라 같은 입력에도 값이 다릅니다. BLAKE3는 미국 국립표준기술연구소(NIST) 표준에 들어 있지 않은 알고리즘입니다. Base64로 표기하면 같은 값이 더 짧아져서 MD5는 24자, SHA-256은 44자가 됩니다.
내려받은 파일이 원본과 같은지 확인하기
배포 페이지에 “SHA-256: 3a7bd3e2…“처럼 해시값이 함께 적혀 있는 경우가 있습니다. 입력 방식을 “파일”로 바꿔 받은 파일을 올리고, 그 값을 “예상 해시값과 비교” 칸에 붙여넣으세요.
- 켜 둔 알고리즘 가운데 하나와 같으면 “SHA-256 값과 일치합니다.“처럼 어느 알고리즘과 맞았는지 알려 주고, 결과 목록의 그 줄을 강조합니다. 붙여넣은 값이 어떤 알고리즘의 것인지 몰라도 됩니다.
- 같은 값이 없으면 “계산된 값과 일치하지 않습니다.“가 나옵니다. 이때는 파일을 다시 내려받으세요.
비교할 때 16진수의 대소문자, 맨 앞의 0x, 중간의 공백·콜론(:)·하이픈(-)은 무시합니다. 5D:41:40:2A:...처럼 두 자리씩 끊어 적은 값도 그대로 붙여넣으면 됩니다. Base64로 적힌 값은 현재 표기 방식과 상관없이 알아보지만, 대소문자까지 정확히 같아야 합니다.
값이 일치한다는 것은 파일이 배포자가 해시를 계산한 파일과 같다는 뜻입니다. 배포 페이지의 해시값 자체가 바뀌어 있었다면 이 확인으로는 알 수 없습니다.
텍스트 해시가 다른 도구의 결과와 다를 때
텍스트는 UTF-8 바이트로 바꾼 뒤 계산합니다. 눈에 보이지 않는 글자 하나도 값에 반영되므로, 다른 도구와 결과가 다르면 대개 줄바꿈이 원인입니다.
hello의 SHA-256은2cf24dba...이지만, 끝에 줄바꿈이 하나 붙은hello는5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03입니다. 터미널에서echo hello | sha256sum으로 얻은 값이 뒤쪽입니다. echo가 끝에 줄바꿈을 붙이기 때문입니다.- 텍스트를 메모장에 저장한 파일과 같은 텍스트를 붙여넣은 결과도 다를 수 있습니다. 파일의 인코딩이 UTF-8이 아니거나 줄바꿈 방식이 다르면 바이트가 달라집니다. 파일의 해시가 필요하면 내용을 붙여넣지 말고 “파일”로 올리세요.
큰 파일은 이렇게 처리합니다
파일은 한꺼번에 메모리에 올리지 않고 16MiB씩 잘라 읽으면서 계산합니다. 켜 둔 알고리즘은 같은 조각을 함께 받아 계산하므로 파일을 알고리즘 수만큼 여러 번 읽지 않습니다. 계산하는 동안 “해시 계산 중…” 진행 막대가 보이고, 취소하면 “계산을 취소했습니다.“가 나옵니다.
해시 계산에는 WebAssembly로 만든 hash-wasm 라이브러리를 씁니다.
