Fluent Python 3장

Lee DoYeon·2023년 5월 31일
1
  • 해시란 뭘까?

임의 크기의 데이터를 고정 크기의 데이터로 매핑하는 함수이다. 해시 함수를 통해 얻어진 고정 크기의 데이터는 해시 값 또는 해시 코드라고 불리며, 해시 함수에 의해 변환된 값은 원래 데이터와 매핑된 고유한 값이다.

해시 함수는 데이터의 내용을 가지고 일정 길이의 해시 값을 반환한다. 이 때, 해시 함수는 동일한 입력에 대해서는 항상 동일한 출력을 반환하고, 서로 다른 입력에 대해서는 가능한 한 서로 다른 출력 값을 반환해야 합니다. 따라서, 해시 함수를 사용하여 데이터의 무결성을 검증하거나, 데이터를 식별하는 용도로 활용할 수 있습니다.

해시는 보안, 검색, 압축, 캐시 등 다양한 분야에서 활용됩니다. 대표적인 예로, 데이터베이스의 비밀번호를 해시 값으로 저장하고, 로그인 시 비밀번호를 입력받아 해시 값을 비교하는 방식으로 인증을 수행하는 경우가 있습니다. 또한, 해시 테이블이나 캐시 등에서 데이터를 빠르게 조회하는 데에도 활용됩니다. → 시간 복잡도 O(1)

근데 내가 해시를 찾아본 이유가 뭐였냐 하면

파이썬의 dict 클래스는 해시 테이블 엔진으로 구성된다. 근데 내가 해시가 뭔지 모르고 해시 테이블 엔진이

몰라서 찾아보는중이였다.

  • “해시가 가능하다” 무슨 뜻일까?

해시는 임의의 길이의 데이터를 고정된 길이의 문자열로 매핑하는 것을 말한다. 일반적으로 해시함수는 입력 데이터의 값을 변경하지 않으면서 고정된 길이의 결과 값을 생성한다. →이 부분을 데이터 정규화라고 생각할 수 있을까? 데이터 정규화도 결국 값을 변경하지 않고 0 ~1값의 사이로 스케일 한건데..?
아무튼 다시

따라서 “해시가 가능하다는 뜻”은 주어진 데이터를 해시 함수를 사용해 고정된 길이의 문자열로 매핑할 수 있다는 것을 의미한다.

  • 그럼 여기서 “고정된 길이의 문자열로 매핑할 수 있다” 이 녀석은 무슨 뜻이냐 ㅋ

이건 어떤 데이터를 해시 함수를 사용해 일정한 길이의 문자열로 변환할 수 있다는 것을 의미한다.

해시 함수는 입력 데이터의 길이와 상관없이 고정된 길이와 결과 값을 생성한다. 예를 들어, 해시 함수를 사용하여 1KB의 데이터를 매핑할 경우와 1MB의 데이터를 매핑할 경우 모두 같은 길이의 해시 값이 생성된다.

이렇게 해시 함수를 사용하여 데이터를 매핑하면 데이터의 원본 내용을 보존한 채로 데이터의 유일성을 확인하거나 데이터의 변경 여부를 확인할 수 있다고 한다.

예시를 보자

Input: "Hello, World!"
Hash value (SHA-256): 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069

위의 예시에서 "Hello, World!" 문자열의 해시 값은 256-bit 길이의 16진수 문자열 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069로 매핑되었다.
이 해시 값은 고정된 길이의 결과 값이며, "Hello, World!" 문자열의 내용을 보존한 채로 암호화된 형태로 저장할 수 있다.

해시 값은 데이터의 변경 여부를 확인하거나 데이터의 유일성을 확인할 때 사용된다.
예를 들어, "Hello, World!" 문자열이 변경된 경우 해시 값도 변경되므로 데이터의 변경 여부를 확인할 수 있다.

불변시퀀스(tuple, str, bytes..)는 해시가 가능하다.

profile
I can do this all day

0개의 댓글