도구스개발

MurmurHash3 계산기

Austin Appleby의 비암호화 해시함수 MurmurHash3(x86, 32비트)를 계산합니다. 4바이트 블록마다 곱셈·회전으로 섞는 과정을 보여주고, 공개된 표준 테스트 벡터와 대조해 정확성을 확인합니다.

MurmurHash3 (32비트)

0xf0fb9168

10진수 4,043,018,600 · UTF-8 5바이트

4바이트 블록 수1
꼬리(나머지) 바이트 수1바이트
4바이트 블록마다 곱셈→회전→곱셈으로 섞고, XOR로 상태에 반영합니다. 4바이트로 안 나눠떨어지는 나머지(꼬리)는 같은 섞기를 한 번 더 거치되 상태에 반영만 합니다. 마지막에 xor-시프트와 곱셈을 번갈아 섞는 마무리(finalization)를 거쳐 입력의 작은 변화가 출력 전체에 퍼지게 합니다.
보안 용도로 쓰면 안 됩니다. 비암호화 해시라 일부러 같은 해시를 내는 입력을 찾기가 쉽습니다. 비밀번호 저장이나 서명에는 dev/hash-generator의 SHA-256 같은 암호화 해시를 쓰세요. 해시테이블·블룸 필터·샤딩 키처럼 빠른 분산이 필요한 곳에 적합합니다.

사용 방법

  1. 1해시할 텍스트를 입력합니다.
  2. 2시드(seed) 값을 정합니다. 같은 텍스트라도 시드가 다르면 다른 해시가 나옵니다.
  3. 332비트 해시값(16진수)을 확인합니다.

자주 묻는 질문

MD5·SHA(dev/hash-generator가 다룹니다)는 암호화 해시로, 「역산하기 어려움」과 「충돌을 일부러 만들기 어려움」을 목표로 설계되어 계산이 상대적으로 무겁습니다. MurmurHash는 그런 보안 목표 없이 오직 「빠르게, 비슷한 입력도 버킷에 고르게 흩어지게」만 신경 쓴 비암호화 해시라 몇 배는 빠릅니다. 그래서 해시테이블·블룸 필터·샤딩 키처럼 보안이 필요 없는 곳에 씁니다.

입력을 4바이트(리틀 엔디안) 블록으로 끊어, 블록마다 곱셈(×0xcc9e2d51)→회전(15비트)→곱셈(×0x1b873593)으로 비트를 섞은 뒤, 지금까지의 상태와 XOR하고 다시 회전(13비트)·선형변환(×5+상수)합니다. 4바이트로 안 나눠떨어지는 나머지(꼬리)는 같은 섞기를 한 번 더 거치되 상태에 반영만 합니다.

덧셈·곱셈만 반복하면 상위 비트와 하위 비트가 서로 영향을 주지 못하고 따로 노는 경향이 있습니다. 비트를 순환시키는 회전 연산이 섞임을 32비트 전체로 퍼뜨려, 입력의 아주 작은 변화도 출력 전체에 영향을 주게 만듭니다.

h ^= h>>>16; h *= 상수; 를 두 번 반복하는 것으로, xor-시프트와 곱셈을 번갈아 섞어 입력 한 비트가 바뀌면 출력 비트의 절반 가까이가 뒤집히는 「눈사태 효과」를 만듭니다. 이게 없으면 마지막 블록의 섞임이 충분하지 않을 수 있습니다.

안 됩니다. 비암호화 해시라 일부러 같은 해시를 내는 입력을 찾기가 암호화 해시보다 훨씬 쉽습니다. 비밀번호 저장이나 서명, 무결성 검증에는 반드시 SHA-256 같은 암호화 해시(dev/hash-generator)를 써야 합니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 여러 독립 구현이 공유하는 공개 표준 테스트 벡터(빈 입력·4바이트 블록·엔디안·1~3바이트 꼬리·"abc"·"Hello, world!"·256자 문자열 등 29개)와 결과가 정확히 일치하는지 확인했습니다.
  • 같은 입력·시드는 항상 같은 값을 내는지(결정적), 시드가 다르면 대개 다른 값이 나오는지, 결과가 항상 32비트 부호 없는 정수 범위(0~2³²−1) 안인지 확인했습니다.
  • 한 글자만 바뀌어도 해시값의 상당 부분이 달라지는지(눈사태 효과) 정성적으로 확인했습니다.
  • 자바스크립트의 곱셈은 53비트까지만 정확하므로 Math.imul(32비트 곱셈 전용 함수)로 감싸 오버플로 오차를 막았습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.