더북(TheBook)

해시 함수

해시 함수는 문자열을 입력 받아 이를 출력 문자열로 매핑하는 알고리즘이다. 입력 문자열의 크기는 정해져 있지 않지만 출력 문자열의 크기는 항상 같다. 예를 들어 Hello world란 문자열을 입력하면 해시 함수는 다음과 같은 출력 문자열을 반환할 것이다.

2aae6c35c94fcfb415dbe95f408b9ce91ee846ed

다음과 같이 좀 더 긴 문자열을 입력 문자열로 사용한다면 어떨까?

"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened."

- DOUGLAS ADAMS, <THE RESTAURANT AT THE END OF THE UNIVERSE>(1980)


마찬가지로 출력 문자열의 길이는 같다.

3f4d004fcb7c40b02deb393d34db9bd02b067f56

분명한 것은 두 출력 문자열이 완전히 다르다는 점이다. 이는 입력 문자열이 다르기 때문이다. 해시 알고리즘의 가장 중요한 특징은 입력 문자열 값이 조금만 달라지더라도 출력 문자열의 값이 완전히 달라진다는 점이다. 예를 들어 Hello world 대신 Hello World를 입력하면 다음과 같은 출력 문자열이 반환된다.

0a4d55a8d778e5022fab701977c5d840bbc486d0

일반적으로 해시 함수는 입력값을 모든 가능한 출력값 범위에 전체적으로 고르게 분산하도록 설계되어 있다. 출력값의 용량은 꽤 커질 수 있다. 예를 들어 SHA-1 알고리즘의 가능한 출력값 개수는 2160개다. 이는 키를 만들 때 특히 유용하다. 키 값이 아무리 비슷하다 하더라도 가능한 출력값 범위에서 고르게 분산된다. 출력값의 범위는 파티션별로 할당될 수 있고 각 파티션에 거의 비슷한 양의 데이터를 할당할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.