해시

해시 (Hash)

해시란 데이터를 다루는 기법 중에 하나로 검색과 저장이 빠르다. 검색과 저장이 빠른 이유는 데이터를 검색할 때 사용할 key와 실제 데이터의 값이 (value가)  한 쌍으로 존재하고, 해시 알고리즘을 통해 key값이 배열의 인덱스로 변환된다. 따라서 검색과 저장의 평균적인 시간 복잡도가 O(1)에 수렴하게 된다. 하지만 충돌(Collison)이 일어나는 경우 O(N)의 시간복잡도를 가지게 된다. 충돌은 따로 밑에서 설명하겠습니다.

출처 : https://velog.io/@cyranocoding/Hash-Hashing-Hash-Table해시-해싱-해시테이블-자료구조의-이해-6ijyonph6o

용도

  1. 정보의 무결성 확인

    바이러스가 포함되어 있는 파일을 다운받거나 자신이 받은 암호화의 결과에 결손이 의심된다면 공개된 해시값과 검사합(Checksum)을 비교하여 검증할 수 있다.

    해시 값을 데이터의 지문처럼 활용하는 경우다.

  2. 암호 저장

    회원이 비밀번호를 디비에 원문 그대로 저장하면 DB가 노출이 된다면 사용자의 정보가 모두 노출되게된다. 이때 해시함수를 이용하여 비밀번호를 해시 함수로 암호화하여 디비에 해시값을 저장하고 비교한다.

    서비스가 해킹이 되어 회원들의 DB가 유출이 되더라도 해커는 역상저항성으로 인해 회원들의 진짜 암호를 알아낼 수 없다.

  3. 해시테이블에서의 활용

    데이터 목록에서 특정 데이터를 조회할 때, 키 값으로 탐색 범위를 줄일 수 있음